升级固件后,一直在recovery界面
Platform: RK3368
OS: Android 9.0
Kernel: 4.4.194
1. 串口日志
E:Failed to mount /cache: No such file or directory
E:Failed to set BCB message: failed to stat /dev/block/by-name/misc try 1: No such file or directory
E:failed to stat /dev/block/by-name/misc try 2: No such file or directory
E:failed to stat /dev/block/by-name/misc try 3: No such file or directory
E:failed to stat /dev/block/by-name/misc try 4: No such file or directory
E:failed to stat /dev/block/by-name/misc try 5: No such file or directory
E:failed to stat /dev/block/by-name/misc try 6: No such file or directory
E:failed to stat /dev/block/by-name/misc try 7: No such file or directory
E:failed to stat /dev/block/by-name/misc try 8: No such file or directory
E:failed to stat /dev/block/by-name/misc try 9: No such file or directory
E:failed to stat /dev/block/by-name/misc try 10: No such file or directory
E:failed to stat /dev/block/by-name/misc
E:
E:Failed to mount /cache: No such file or directory
E:Can't mount /cache/recovery/last_locale
通过日志可知是在recovery模式下misc,cache等分区找不到,通过串口执行命令ls /dev/block/,发现确实没有块设备.
2. 解决方法
Android9支持提前装载分区,设备可以使用设备树叠加层 (DTO) 为提前装载的分区指定 fstab 条目。所以不用修改recovery.fstab了.
修改当前dts,由于调试的设备是nand flash,而SDK默认是EMMC,所以需要开启nandc,把emmc关闭;
&emmc {
bus-width = <8>;
cap-mmc-highspeed;
mmc-hs200-1_8v;
supports-emmc;
disable-wp;
non-removable;
num-slots = <1>;
pinctrl-names = "default";
pinctrl-0 = <&emmc_clk &emmc_cmd &emmc_bus8>;
status = "disabled";
};
&nandc0 {
status = "okay";
};
开启nandc还不够,这只是解决recovery中块设备不存在的问题,不会有/dev/block/by-name目录,还需要在firmware_android节点中添加boot_devices = “ff0f0000.dwmmc,ff400000.nandc”;这样init程序才能找到正确的分区信息;
&firmware_android {
compatible = "android,firmware";
boot_devices = "ff0f0000.dwmmc,ff400000.nandc";
vbmeta {
compatible = "android,vbmeta";
parts = "vbmeta,dtbo";
};
fstab {
compatible = "android,fstab";
vendor {
compatible = "android,vendor";
dev = "/dev/block/by-name/vendor";
type = "ext4";
mnt_flags = "ro,barrier=1,inode_readahead_blks=8";
fsmgr_flags = "wait,avb";
};
};
};

升级rk3368设备到Android9.0后,设备一直停留在recovery界面。问题源于在recovery模式下找不到misc和cache分区。通过串口日志发现缺少块设备。解决方法是利用Android9的设备树叠加层功能,修改dts文件以启用nandc并更新boot_devices属性,使init程序能正确识别分区信息。
2025





