锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

android启动失败,分区metadata没找到

时间:2022-11-15 11:00:00 007b2ln传感器

问题现象,华硕tinkerboard 2s启动失败,错误日志如下:

[ 1.620614] Run /init as init process
[ 1.627199] init: init first stage started!
[ 1.627699] init: [libfs_mgr]ReadFstabFromDt(): failed to read fstab from dt
[ 1.628020] init: [libfs_mgr]fstab path by boot mode:/fstab.rk30board
[ 1.628849] init: Using Android DT directory /proc/device-tree/firmware/android/
[ 1.794027] init: bool android::init::FirstStageMount::InitRequiredDevices(): partition(s) not found in /sys, waiting for their uevent(s): metadata
[ 11.795669] init: Wait for partitions returned after 10001ms
[ 11.795720] init: bool android::init::FirstStageMount::InitRequiredDevices(): partition(s) not found after polling timeout: metadata
[ 11.795877] init: Failed to mount required partitions early ...
[ 11.811644] init: #00 pc 00000000000e9ea0 /init
[ 11.811694] init: #01 pc 000000000006c7ac /init
[ 11.811724] init: #02 pc 000000000006ed84 /init
[ 11.811752] init: #03 pc 00000000000a4268 /init
[ 11.811780] init: #04 pc 0000000000064294 /init
[ 11.811807] init: #05 pc 0000000000147244 /init
[ 11.811832] init: Reboot ending, jumping to kernel
[ 11.872744] reboot: Restarting system with command 'bootloader'

分析问题:

从日志看metadata理论上,分区不能挂载。android启动不需要挂载metadata我调整了分区gpt分区,真的把metadata分区被删除,所以我增加了分区,还是报错了。android开始阅读/开始阅读proc/device-tree/firmware/android/ 从需要挂载的分区获取信息dtb我成的,我查看dts,没有相关信息。我增加了metadata分区,但没有报告uvent因此,我在内核中添加打印,检查内核是否分析分区信息:

diff --git a/block/partition-generic.c b/block/partition-generic.c
index 98d60a59b843..fa5debe8233e 100644
--- a/block/partition-generic.c
b/block/partition-generic.c
@@ -322,6 322,8 @@ struct hd_struct *add_partition(struct gendisk *disk, int partno,
const char *dname;
int err;
printk("zeng start:%llx,len:%llx,name:%s/n",(u64)start, (u64)len, info->volname);

err = disk_expand_part_tbl(disk, partno);
if (err)
return ERR_PTR(err);

发现没有真正的分析metadata分区,然后再看gpt信息,发现metadata分区起始地址0x007B0000,写错0x0077B0000,emmc没那么大,导致没有生成metadata分区。修改后,系统正常启动:

[ 1.616551] Run /init as init process
[ 1.623069] init: init first stage started!
[ 1.623593] init: [libfs_mgr]ReadFstabFromDt(): failed to read fstab from dt
[ 1.623905] init: [libfs_mgr]fstab path by boot mode:/fstab.rk30board
[ 1.624690] init: Using Android DT directory /proc/device-tree/firmware/android/
[ 1.667915] init: [libfs_mgr]Created logical partition system on device /dev/block/dm-0
[ 1.668798] init: [libfs_mgr]Created logical partition vendor on device /dev/block/dm-1
[ 1.669744] init: [libfs_mgr]Created logical partition product on device /dev/block/dm-2
[ 1.670573] init: [libfs_mgr]Created logical partition odm on device /dev/block/dm-3

从打印信息来看,tinkerboard 开发板不是从/proc/device-tree/ 从文件//fstab.rk30board获取,文件存在ramdisk是的。文件内容如下:

system /system ext4 ro,barrier=1 wait,logical,first_stage_mount
vendor /vendor ext4 ro,barrier=1 wait,logical,first_stage_mount
odm /odm ext4 ro,barrier=1 wait,logical,first_stage_mount
product nbsp;                              /product  ext4  ro,barrier=1                                                                   wait,logical,first_stage_mount
/dev/block/by-name/metadata                /metadata ext4  nodev,noatime,nosuid,discard,sync                                              wait,formattable,first_stage_mount
/dev/block/by-name/misc                    /misc     emmc  defaults                                                                       defaults
/dev/block/by-name/cache                   /cache    ext4  noatime,nodiratime,nosuid,nodev,noauto_da_alloc,discard                        wait,check
/dev/block/by-name/userdata                /data     ext4  discard,noatime,nosuid,nodev,noauto_da_alloc,data=ordered,user_xattr,barrier=1 latemount,wait,formattable,check,fileencryption=software,quota,reservedsize=128M,checkpoint=block

/dev/block/zram0                           none      wap   defaults                                                                       zramsize=50%
/devices/platform/*usb*                    auto      vfat  defaults                                                                       voldmanaged=usb:auto
/devices/platform/fe320000.dwmmc/mmc_host* auto      auto  defaults                                                                       voldmanaged=sdcard1:auto,encryptable=userdata

可知metadata分区是被要求在第一阶段需要被挂载上。

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章