Platform: RK3368
OS: Android 6.0
Kernel: 3.10.0
现象
重启进recovery升级update.zip时,不进升级界面,而是进入recovery界面。并有打印错误"“E:failed to mount /cache /dev/block/rknand_cache (No such file or directory)”
升级日志:
Starting recovery (pid 156) on Mon Jan 21 09:21:53 2013
read cmdline
cmdline=earlyprintk=uart8250-32bit,0xff690000 console=ttyS2 androidboot.baseband=N/A androidboot.selinux=enforcing androidboot.hardware=rk30board androidboot.console=ttyS2 init=/init mtdparts=rk29xxnand:0x00002000@0x00000000(parameter),0x00002000@0x00002000(uboot),0x00002000@0x00004000(trust),0x00002000@0x00006000(misc),0x00008000@0x00008000(resource),0x00008000@0x00010000(kernel),0x00010000@0x00018000(boot),0x00010000@0x00028000(recovery),0x00038000@0x00038000(backup),0x00040000@0x00070000(cache),0x00002000@0x000B0000(kpanic),0x00200000@0x000B2000(system),0x00008000@0x002B2000(metadata),0x00002000@0x002BA000(baseparamer),0x00020000@0x002BC000(radical_update),-@0x002DC000(userdata) storagemedia=nand loader_charged uboot_logo=0x02000000@0x7dc00000:0x01000000 loader.timestamp=2018-12-12_17:12:58
bootmode = unknown
recovery filesystem table
=========================
0 /mnt/internal_sd vfat /dev/block/rknand_user 0
1 /mnt/external_sd vfat /dev/block/mmcblk0p1 0
2 /system ext4 /dev/block/rknand_system 0
3 /cache ext4 /dev/block/rknand_cache 0
4 /metadata ext4 /dev/block/rknand_metadata 0
5 /data ext4 /dev/block/rknand_userdata 0
6 /cust ext4 /dev/block/rknand_cust 0
7 /custom ext4 /dev/block/rknand_custom 0
8 /radical_update ext4 /dev/block/rknand_radical_update 0
9 /misc mtd misc 0
10 /uboot mtd uboot 0
11 /charge mtd charge 0
12 /resource mtd resource 0
13 /parameter mtd parameter 0
14 /boot mtd boot 0
15 /recovery mtd recovery 0
16 /backup mtd backup 0
17 /trust mtd trust 0
18 /baseparamer mtd baseparamer 0
19 /tmp ramdisk ramdisk 0
I/ [File] : bootable/recovery/recovery.cpp; [Line] : 1301; [Func] : SetSdcardRootPath; InternalSD_ROOT: /mnt/internal_sd
I/ [File] : bootable/recovery/recovery.cpp; [Line] : 1303; [Func] : SetSdcardRootPath; ExternalSD_ROOT: /mnt/external_sd
D/ [File] : bootable/recovery/recovery.cpp; [Line] : 1980; [Func] : main; to dump args befor get_args() :
1 argument(s) :
/sbin/recovery
matches 0, mtdnum -1, mtdsize 0, mtderasesize 0, mtdname
matches 4, mtdnum 0, mtdsize 400000, mtderasesize 4000, mtdname parameter
matches 4, mtdnum 1, mtdsize 400000, mtderasesize 4000, mtdname uboot
matches 4, mtdnum 2, mtdsize 400000, mtderasesize 4000, mtdname trust
matches 4, mtdnum 3, mtdsize 400000, mtderasesize 4000, mtdname misc
matches 4, mtdnum 4, mtdsize 1000000, mtderasesize 4000, mtdname resource
matches 4, mtdnum 5, mtdsize 1000000, mtderasesize 4000, mtdname kernel
matches 4, mtdnum 6, mtdsize 2000000, mtderasesize 4000, mtdname boot
matches 4, mtdnum 7, mtdsize 2000000, mtderasesize 4000, mtdname recovery
matches 4, mtdnum 8, mtdsize 7000000, mtderasesize 4000, mtdname backup
matches 4, mtdnum 9, mtdsize 8000000, mtderasesize 4000, mtdname cache
matches 4, mtdnum 10, mtdsize 400000, mtderasesize 4000, mtdname kpanic
matches 4, mtdnum 11, mtdsize 40000000, mtderasesize 4000, mtdname system
matches 4, mtdnum 12, mtdsize 1000000, mtderasesize 4000, mtdname metadata
matches 4, mtdnum 13, mtdsize 400000, mtderasesize 4000, mtdname baseparamer
matches 4, mtdnum 14, mtdsize 4000000, mtderasesize 4000, mtdname radical_update
matches 4, mtdnum 15, mtdsize 8E800000, mtderasesize 4000, mtdname userdata
find_partition : p->name parameter, name misc
find_partition : p->name uboot, name misc
find_partition : p->name trust, name misc
find_partition : p->name misc, name misc
260 : devname : /dev/block/rknand_misc
E:Can't find misc
E/ [File] : bootable/recovery/bootloader.cpp; [Line] : 82; [Func] : get_bootloader_message_mtd; Can't find misc
failed to create /cache dir,err=File exists!
mount /cache /dev/block/rknand_cache (ext4)
E:failed to mount /cache /dev/block/rknand_cache (No such file or directory)
E/ [File] : bootable/recovery/roots.cpp; [Line] : 139; [Func] : ensure_path_mounted; f0.
解决办法
由于rk3368是在init.rc中加载flash驱动,所以在recovery运行时,block设备节点可能还未生成。
on fs
insmod /rk30xxnand_ko.ko
所以需要等block设备节点生成后再挂载cache分区。在bootable/recovery/recovery.cpp的main函数中做以下修改:
printf("Starting recovery (pid %d) on %s", getpid(), ctime(&start));
if(check_sdboot()==0)
bSDBoot = true;
else if(check_usbboot()==0)
bUsbBoot = true;
load_volume_table();
SetSdcardRootPath();
#ifdef LogToSDCard
copy_log_to_sd();
#endif
+ //cache may not ready,so wait a few seconds.
+ for(int n = 0; n < 3; n++) {
+ if(0 == ensure_path_mounted(CACHE_LOG_DIR)){
+ break;
+ }else {
+ printf("delay 1sec\n");
+ sleep(1);
+ }
+ }

在RK3368平台使用Android 6.0系统进行recovery升级时遇到挂载/cache分区失败的问题,错误提示为"No such file or directory"。原因是recovery启动时block设备节点未生成。解决办法是在recovery.cpp的main函数中等待block设备节点生成后再挂载cache分区。
3019

被折叠的 条评论
为什么被折叠?



