【Android A/B】init: [libfs_mgr]Skipping '/dev/block/bootdevice/by-name/xxxxxx' during mount_all

本文解决了一个在高通平台上的AndroidP项目中遇到的问题,即一个私有分区未能正确挂载。问题源于分区配置不当,未正确识别A/B分区特性。通过调整fstab.qcom文件中的配置,增加“slotselect”标志,成功解决了挂载问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

高通平台,Android P项目,使能A/B分区,使用vendor分区,同时添加了一个私有分区“xxxxxx”,然而此分区没有挂载上。抓取dmesg log,显示如下:

init: [libfs_mgr]Skipping '/dev/block/bootdevice/by-name/xxxxxx' during mount_all

上面的log由system/core/fs_mgr/fs_mgr.cpp文件中的fs_mgr_mount_all函数如下代码打印的:

if (fstab->recs[i].fs_mgr_flags & MF_WAIT &&
            !fs_mgr_wait_for_file(fstab->recs[i].blk_device, 20s)) {
            LERROR << "Skipping '" << fstab->recs[i].blk_device << "' during mount_all";
            continue;
        }

此部分代码,说明当recs[i]的flags为“wait”,且找不到recs[i]的blk_device时,进去if语句并打印ERROR log。

通过log可知“xxxxxx”分区的blk_device为“/dev/block/bootdevice/by-name/xxxxxx”,进入adb模式,查看/dev/block/bootdevice/by-name/路径,发现确实不存在“xxxxxx”,而存在“xxxxxx_a”和“xxxxxx_b”。

说明“xxxxxx”分区配置为A/B分区,但却没有在fstab中配置为A/B分区。

解决方案:

修改device/qcom/sdm845/fstab.qcom文件有关“xxxxxx”分区的配置,将其flags增加一个“slotselect

-/dev/block/bootdevice/by-name/xxxxxx                /vendor/bt_firmware  vfat    ro,shortname=lower,uid=1002,gid=3002,dmask=227,fmask=337,context=u:object_r:bt_firmware_file:s0   wait
+/dev/block/bootdevice/by-name/xxxxxx                /vendor/bt_firmware  vfat    ro,shortname=lower,uid=1002,gid=3002,dmask=227,fmask=337,context=u:object_r:bt_firmware_file:s0   wait,slotselect

编译之后的fstab.qcom放在vendor/etc/路径下,重刷vendor分区,重启之后进入adb mode,进去/vendor/bt_firmware/可以查看到所有文件。

[11:27:24:071] [ 6.037791][T1300001] init: init 5: [libfs_mgr] [chengqian_fs_mgr_do_mount_one] Mounting /metadata from /dev/block/by-name/metadata␍␊ [11:27:24:073] [ 6.038112][T1300001] init: init 5: [libfs_mgr] [chengqian_prepare_fs_for_mount] Preparing mount: blk_device=/dev/block/by-name/metadata, mount_point=/metadata, fs_type=ext4␍␊ [11:27:24:138] [ 6.083160][T1100001] init: init 6: [libfs_mgr] superblock s_max_mnt_count:65535,/dev/block/by-name/metadata␍␊ [11:27:24:140] [ 6.089918][T1100001] init: init 5: [libfs_mgr] [chengqian_prepare_fs_for_mount] Read ext4 superblock successfully␍␊ [11:27:24:144] [ 6.094671][T1100001] init: init 5: [libfs_mgr] [chengqian_prepare_fs_for_mount] Device size=33554432 bytes, block_size=4096, device_block_count=8192␍␊ [11:27:24:146] [ 6.100414][T1100001] init: init 5: [libfs_mgr] Filesystem on /dev/block/by-name/metadata was not cleanly shutdown; state flags: 0x1, incompat feature flags: 0x46␍␊--正常开机没有这个log [11:27:24:153] [ 6.110464][T1100001] init: init 5: [libfs_mgr] [chengqian_prepare_fs_for_mount] Filesystem unclean shutdown detected, flags: 1␍␊--正常开机没有这个log [11:27:24:155] [ 6.113342][T1100001] init: init 5: [libfs_mgr] [chengqian_prepare_fs_for_mount] Running fsck on /dev/block/by-name/metadata␍␊--正常开机没有这个log [11:27:24:157] [ 6.116445][T1100001] init: EXT4-fs: Ignoring removed nomblk_io_submit option␍␊ [11:27:24:163] [ 6.130915][T1000001] init: EXT4-fs (mmcblk0p9): recovery complete␍␊ [11:27:24:163] [ 6.133074][T1000001] init: EXT4-fs (mmcblk0p9): mounted filesystem 9094c4c6-c49b-41dd-82d9-24bdf6ae5fcd r/w with ordered data mode. Quota mode: none.␍␊ [11:27:24:167] [ 6.135344][T1000001] init: init 5: [libfs_mgr] check_fs(): mount(/dev/block/by-name/metadata,/metadata,ext4)=0: Success␍␊ [11:27:24:169] [ 6.137425][T1100001] init: EXT4-fs (mmcblk0p9): unmounting filesystem 9094c4c6-c49b-41dd-82d9-24bdf6ae5fcd.␍␊ [11:27:24:173] [ 6.141556][T1000001] init: init 5: [libfs_mgr] umount_retry(
03-08
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值