记一个android R上开机启动vendor.boot-hal-1-1进程启动失败的过程分析,总结一下下,也给需要的提供个参考。

问题:
在开机启动过程中,一直报错,vendor.boot-hal-1-1无法正常启动。

[   18.037464]  {1}[1:init]init: starting service 'vendor.boot-hal-1-1'...
[   18.040238]  {1}[1:init]init: Control message: Processed ctl.interface_start for 'android.hardware.boot@1.0::IBootControl/default' from pid: 2387 (/system/bin/hwservicemanager)
[   18.040622]  {1}[1:init]init: Control message: Processed ctl.interface_start for 'android.hardware.boot@1.0::IBootControl/default' from pid: 2387 (/system/bin/hwservicemanager)
[   18.071197]  {1}[1:init]init: Service 'vendor.boot-hal-1-1' (pid 2507) 333 exited with status 1
[   18.071225]  {1}[1:init]init: Sending signal 9 to service 'vendor.boot-hal-1-1' (pid 2507) process group...
[   18.071506]  {1}[1:init]libprocessgroup: Successfully killed process cgroup uid 0 pid 2507 in 0ms
[   18.096360]  {1}[1:init]init: Service 'bpfloader' (pid 2502) 333 exited with status 0 oneshot service took 0.149000 seconds in background
[   18.096385]  {1}[1:init]init: Sending signal 9 to service 'bpfloader' (pid 2502) process group...
[   18.096593]  {1}[1:init]libprocessgroup: Successfully killed process cgroup uid 0 pid 2502 in 0ms
[   19.159220]  {2}[2503:update_verifier]HidlServiceManagement: Waited one second for android.hardware.boot@1.0::IBootControl/default
[   19.173529]  {2}[2503:update_verifier]HidlServiceManagement: getService: Trying again for android.hardware.boot@1.0::IBootControl/default...
[   19.174937]  {3}[1:init]init: starting service 'vendor.boot-hal-1-1'...
[   19.180231]  {3}[1:init]init: Control message: Processed ctl.interface_start for 'android.hardware.boot@1.0::IBootControl/default' from pid: 2387 (/system/bin/hwservicemanager)
[   19.214810]  {3}[1:init]init: Service 'vendor.boot-hal-1-1' (pid 2509) 333 exited with status 1
[   19.224638]  {3}[1:init]init: Sending signal 9 to service 'vendor.boot-hal-1-1' (pid 2509) process group...
[   19.235949]  {3}[1:init]libprocessgroup: Successfully killed process cgroup uid 0 pid 2509 in 0ms
[   20.213341]  {2}[2503:update_verifier]HidlServiceManagement: Waited one second for android.hardware.boot@1.0::IBootControl/default
[   20.227637]  {2}[2503:update_verifier]HidlServiceManagement: getService: Trying again for android.hardware.boot@1.0::IBootControl/default...

看起来是vendor.boot-hal-1-1这个服务起来后,很快就异常了,然后被kill掉了。

如何分析定位?
因为这个log一直打印刷屏,看着有点烦,可以通过如下命令把log打印关闭

echo 0 > /proc/sys/kernel/printk

好了,现在串口不疯狂打印log了,可以借助strace进行定位,命令strace 进程名,当然也可以用strace -p 进程pid

strace /vendor/bin/hw/android.hardware.boot@1.1-service

strace后打印的部分内容如下:

openat(AT_FDCWD, "/vendor/etc/fstab.xxx", O_RDONLY|O_CLOEXEC) = 6
writev(5, [{iov_base="\0\241\nNb\370`\266\236)#", iov_len=11}, {iov_base="\4", iov_len=1}, {iov_base="android.hardware.boot@1.1-servic"..., iov_len=34},
{iov_base="[libfs_mgr]ReadDefaultFstab  "..., iov_len=81}], 4) = 127
writev(5, [{iov_base="\0\241\nNb\370`eU8#", iov_len=11}, {iov_base="\6", iov_len=1}, {iov_base="android.hardware.boot@1.1-servic"..., iov_len=34},
{iov_base="Could not find bootloader messag"..., iov_len=79}], 4) = 125
openat(AT_FDCWD, "/dev/pmsg0", O_WRONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
writev(5, [{iov_base="\0\241\nNb\370`/\310E#", iov_len=11}, {iov_base="\6", iov_len=1}, {iov_base="android.hardware.boot@1.1-impl\0", iov_len=31},
{iov_base="Could not initialize BootControl"..., iov_len=40}], 4) = 83
close(6)                                = 0
exit_group(1)                           = ?
+++ exited with 1 +++

根据这里面的打印内容“Could not initialize BootControl”,去代码中找吧,因为是HIDL的进程,直接去android\hardware\interfaces下面检索,最后定位到在android/hardware/interfaces/boot/1.1/default/boot_control/libboot_control.cpp

bool BootControl::Init() {std::string device = get_bootloader_message_blk_device(&err);if (device.empty()) {LOG(ERROR) << "**Could not find bootloader message block device**: " << err;return false;}...
}

继续追一下get_bootloader_message_blk_device的实现

 std::string get_bootloader_message_blk_device(std::string* err) {std::string misc_blk_device = get_misc_blk_device(err);if (misc_blk_device.empty()) return "";if (!wait_for_device(misc_blk_device, err)) return "";return misc_blk_device;}

继续追get_misc_blk_device的实现,从下面的代码基本上可以断定是从fstab中找misc分区节点配置了。

 std::string get_misc_blk_device(std::string* err) {if (g_misc_device_for_test.has_value() && !g_misc_device_for_test->empty()) {return *g_misc_device_for_test;}Fstab fstab;if (!ReadDefaultFstab(&fstab)) {*err = "failed to read default fstab";return "";}for (const auto& entry : fstab) {if (entry.mount_point == "/misc") {return entry.blk_device;}}*err = "failed to find /misc partition";return "";}

回头一看,果然是fstab.xxx中没有配置misc分区,添加上

/dev/block/by-name/misc  /misc            emmc    defaults            defaults

重新编译,果然就不再报这个问题了。
现在回头来看一下vendor.boot-hal-1-1启动的是啥进程,看了一下相关的bp和代码,这是打开ENABLE_AB = true后,用来OTA A/B升级完成时更新slot信息的进程和相关接口,为了告诉系统应用引导哪个slot a还b镜像。
好了,就分析到这吧。

android R vendor.boot-hal-1-1启动失败问题分析相关推荐

  1. Android应用程序组件Content Provider的启动过程源代码分析(1)

             通过前面的学习,我们知道在Android系统中,Content Provider可以为不同的应用程序访问相同的数据提供统一的入口.Content Provider一般是运行在独立的进 ...

  2. [转] 常见WinCE启动失败原因分析

    *********************************************** 一般情况下,为设计中的IC开发SW方案,难免会碰到Bootloader/EBoot/OS启动失败的情况, ...

  3. enspar启动失败40_分析AR启动失败错误代码40终极解决方案

    1.重新安装ENSP的所有组件(包括winpcap,virtualBox,wireshark,ensp),如果不能解决看2:? 2.打开Oracle VM VirtualBox,删除除了选中的三个ba ...

  4. Android应用程序组件Content Provider的启动过程源代码分析(6)

        Step 17. ActivityThread.installProvider         这个函数定义在frameworks/base/core/java/android/app/Act ...

  5. Docker 容器启动失败日志分析方法,启动sonic容器实例simple时未报错运行一会又停止的问题排查实例演示

    从这个过程可以看到启动容器没几秒自己就关闭了. 首先通过 docker ps -a 查出所有的容器实例. 查到出现问题的实例 ID. 然后通过 docker logs 2b9ca660fc69 命令查 ...

  6. virsh default启动失败原因分析及解决

    启动default时出现如下错误提示: [root@node1 ~]# virsh net-start default error: Failed to start network default e ...

  7. 数据库启动失败以及在cmd(命令窗口)中启动失败原因分析和解决

    问题描述如下 点解MySQL图标进去后连接数据库时显示不能连接到数据库服务 原因: 个人习惯不同,如果不是经常用mysql一般会将MySQL服务设置为手动开启(我就是,想节省CPU).所以是你电脑上M ...

  8. 未知的错误代码在应用程序安装:110 android,应用在华为P9手机上安装失败原因分析 (错误码:-110)...

    问题描述: 应用在之前的华为手机上都能正常安装,但是在华为P9手机上安装失败,提示错误为: 失败原因: 系统问题导致安装失败(错误码:-110) 原因分析: 开始怀疑是android的版本问题,后来看 ...

  9. 【WiFi】hostapd 配置80M频宽某些信道启动失败问题分析及解决

    问题描述 测试时发现在设置44 48 60 64信道的时候出现hostapd起不来的情况 问题分析 5G信道与频宽分布图 从上图可以看到,80M频宽是由2个40M频宽组成,是由4个20M频宽组成,对于 ...

最新文章

  1. Numpy and Matplotlib
  2. 【转】IOS的各种后台情况的实现
  3. 如何将记事本转换.php,记事本怎么变成表格?电脑便签如何将记事内容转化成Excel表格...
  4. SVN版本管理工具使用中常见的代码提交冲突问题的解决方法
  5. KEIL5 编译器导致的程序异常
  6. 数据挖掘--挖掘建模-时序模式-ARIMA模型
  7. [Es] Rejecting mapping update to [xxx] as the final mapping would have more than 1 type [xxx xxx]
  8. eclipse支持html,让eclipse完全支持HTML/JS/CSS智能提示
  9. 12月15日学习内容整理:ORM中的queryset类型,中介模型,extra函数和分组补充
  10. Spring集成CXF发布WebService并在客户端调用
  11. 发布PHP项目_Jenkins发布PHP项目之一自动化部署
  12. PlaceholderTextView
  13. Lunix git stash clear 或者 git stash drop后恢复的方法
  14. CrackMe-001
  15. 2022年建筑电工(建筑特殊工种)考试练习题及模拟考试
  16. SSD-tensorflow Windows环境下,mAP的计算
  17. [SDOI 2015] 星际战争
  18. ipad iphone开发_如何在iPhone或iPad上恢复已删除的照片
  19. 回归预测 | MATLAB实现贝叶斯优化门控循环单元(BO-GRU)多输入单输出
  20. app界面设计是什么?需要学习什么UI软件

热门文章

  1. 2019年的web前端领域
  2. Java 编写推箱子报告_Java推箱子怎么写啊?
  3. 快毕业才发现自己找不到工作,为什么实习经历如此重要?
  4. python中一切数据都是对象吗_Python 对象中的数据类型
  5. nodemanager不能正常关闭_家居燃气安全,燃气阀门的开与关可不能不当回事
  6. 使用telephonymanager真机调试 闪退_watchOS 上的一次 SKView 内存泄露调试
  7. 监督学习 | CART 分类回归树原理
  8. RLock vs Lock
  9. 我也给要来澳大利亚的虫子们一点建议
  10. Macbook怎么关闭磁盘“未正确推出”提示