日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/3/15 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android R vendor.boot-hal-1-1启动失败问题分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

記一個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启动失败问题分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。