OpenWRT Could not open mtd device: FIP
今天给设备刷机的时候,想更新uboot固件,一直出现 Could not open mtd device: FIP 错误。
解决方案
使用kmod-mtd-rw组件,这也是网上大家推荐的方案,但都是直接让你去opkg install,但是很多编译好的固件并没有这个包,可以使用官方的预编译好的包进行安装。
首先找到自己设备的版本号,比如我的是23.05.2,然后进入 https://archive.openwrt.org/releases/ ,找到对应的版本号,然后根据设备的target和subtarget进入响应的目录,比如我的是mediatek/filogic,最后的网址即:https://archive.openwrt.org/releases/23.05.2/targets/mediatek/filogic/packages/
在其中找到kmod-mtd-rw包下载安装即可,但是由于固件和官方的kernel版本不一致,会爆如下错:
root@ImmortalWrt:~# opkg install kmod-mtd-rw_5.15.137+git-20160214-2_aarch64_cortex-a53.ipkUnknown package'kmod-mtd-rw'.Collected errors: * pkg_hash_check_unresolved: cannotfinddependency kernel(=5.15.137-1-29c7378c7e1adfd339581af2c1ddc93a)forkmod-mtd-rw * pkg_hash_fetch_best_installation_candidate: Packagesforkmod-mtd-rw found, but incompatible with the architectures configured * opkg_install_cmd: Cannotinstallpackage kmod-mtd-rw.这时候需要先在package中找到kernel,先安装kernel,如果提示降级,那我们就强制降级即可。命令为:
opkginstall--force-downgrade kernel_5.15.137-1-29c7378c7e1adfd339581af2c1ddc93a_aarch64_cortex-a53.ipk效果如下:
root@ImmortalWrt:~# opkg install kernel_5.15.137-1-29c7378c7e1adfd339581af2c1ddc93a_aarch64_cortex-a53.ipkNot downgrading package kernel on root from5.15.150-1-ca8427c0778a4b33dfc0a166a18171d7 to5.15.137-1-29c7378c7e1adfd339581af2c1ddc93a. root@ImmortalWrt:~# opkg install --force-downgrade kernel_5.15.137-1-29c7378c7e1adfd339581af2c1ddc93a_aarch64_cortex-a53.ipkDowngrading kernel on root from5.15.150-1-ca8427c0778a4b33dfc0a166a18171d7 to5.15.137-1-29c7378c7e1adfd339581af2c1ddc93a... Configuring kernel.然后再安装,即可安装成功(其他包也是相同的道理):
root@ImmortalWrt:~# opkg install kmod-mtd-rw_5.15.137+git-20160214-2_aarch64_cortex-a53.ipkInstalling kmod-mtd-rw(5.15.137+git-20160214-2)to root... Configuring kmod-mtd-rw.之后加载mtd-rw这个mod,注意这里网上给出的命令为:insmod /lib/modules/$(uname -r)/mtd-rw.ko i_want_a_brick=1,但是因为我们前面重新安装过kernel,uname -r获取的版本号会和安装的路径不一样,需要手动查找一下。
root@ImmortalWrt:~# find / -name "mtd-rw.ko"/lib/modules/5.15.137/mtd-rw.ko /overlay/upper/lib/modules/5.15.137/mtd-rw.ko root@ImmortalWrt:~# insmod /lib/modules/5.15.137/mtd-rw.ko i_want_a_brick=1之后再写入FIP分区即可(这里如果报错了 fip 大小写均可尝试一下):
root@ImmortalWrt:~# mtd write jcgq30-uboot.bin fipUnlocking fip... Writing from jcgq30-uboot.bin to fip...