本文主要是介绍【Android A/B】init: [libfs_mgr]Skipping '/dev/block/bootdevice/by-name/xxxxxx' during mount_all,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
高通平台,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/可以查看到所有文件。
这篇关于【Android A/B】init: [libfs_mgr]Skipping '/dev/block/bootdevice/by-name/xxxxxx' during mount_all的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!