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

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

高通平台,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/可以查看到所有文件。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值