开机报错failed to find device default fstab

开机启动过程中遇到错误,表现为找不到默认的fstab和/system/bin/init程序,导致系统重启。通过日志分析,问题出在fstab文件未能找到,以及init程序执行失败。在代码层面,`GetFstabPath()`和`ReadDefaultFstab()`函数中,尝试查找多个fstab路径,但未成功。最终解决方案是在device.mk中添加一行代码将fstab文件复制到指定目录。问题出现可能与AB分区和`androidboot.force_normal_boot`参数有关,该参数在AB分区的lk代码中被设置。
摘要由CSDN通过智能技术生成

开机进入kernel后重启了

抓了一份正常的,又抓了一份异常的log,对比后可以发现

"[ 3.466078] <0>.(0)[1:init]init 3: [libfs_mgr]ReadDefaultFstab(): failed to find device default fstab

[ 3.467237] <0>.(0)[1:init]init 3: Failed to fstab for first stage mount
[ 3.468166] <0>.(0)[1:init]init 3: Using Android DT directory /proc/device-tree/firmware/android/
[ 3.469600] <0>.(0)[1:init]init 3: First stage mount skipped (missing/incompatible/empty fstab in device tree)"
"[ 3.472066] <0>.(0)[1:init]init 3: execv("/system/bin/init") failed: No such file or directory

[    3.476582] <0>.(0)[1:init]init 5: #00 pc 000000000006c17c  /system/bin/init

[    3.477496] <0>.(0)[1:init]init 5: #01 pc 0000000000097ee4  /system/bin/init

[    3.478387] <0>.(0)[1:init]init 5: #02 pc 000000000000c650  /system/lib64/libbase.so

[    3.479362] <0>.(0)[1:init]init 5: #03 pc 0000000000040108  /system/bin/init

[    3.480273] <0>.(0)[1:init]init 5: #04 pc 00000000000240f4  /system/bin/init

[    3.481162] <0>.(0)[1:init]init 5: #05 pc 000000000007d86c  /system/lib64/libc.so

[    3.482103] <0>.(0)[1:init]init 5: Reboot ending, jumping to kernel"

这里出现了问题
"[ 3.466078] <0>.(0)[1:init]init 3: [libfs_mgr]ReadDefaultFstab(): failed to find device default fstab"

首先是没找到fstab

"[ 3.472066] <0>.(0)[1:init]init 3: execv("/system/bin/init") failed: No such file or directory”

其次在执行/system/bin/init程序的时候,发现没有

然后接下来就像我们所熟知的linux执行init程序如果发现没有,就会

[    3.476582] <0>.(0)[1:init]init 5: #00 pc 000000000006c17c  /system/bin/init

[    3.477496] <0>.(0)[1:init]init 5: #01 pc 0000000000097ee4  /system/bin/init

[    3.478387] <0>.(0)[1:init]init 5: #02 pc 000000000000c650  /system/lib64/libbase.so

[    3.479362] <0>.(0)[1:init]init 5: #03 pc 0000000000040108  /system/bin/init

[    3.480273] <0>.(0)[1:init]init 5: #04 pc 00000000000240f4  /system/bin/init

[    3.481162] <0>.(0)[1:init]init 5: #05 pc 000000000007d86c  /system/lib64/libc.so

把默认的init程序路径都找一遍,然后都没找到,就重启了


 

ok,根据错误log走一遍相关代码流程

initmain.cpp里面的main函数会调用下面的FirstStageMain()函数

FirstStageMain()    //core/init/first_stage_main.cpp这个文件的main函数会调用SetInitAvbVersionInRecovery()这个函数
    SetInitAvbVersionInRecovery()
        ReadFirstStageFstab()
            ReadDefaultFstab
                ReadFstabFromDt()
                    if (fstab_buf.empty()) {
                        if (log) LINFO << __FUNCTION__ << "(): failed to read fstab from dt";    //
正常也有这个打印
                          ...
                        if (!default_fstab_path.empty()) {
                                ReadFstabFromFile(default_fstab_path, &default_fstab);
           

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值