【问题标题】:How "adb reboot bootloader" works internally?“adb reboot bootloader”如何在内部工作?
【发布时间】:2017-06-28 10:26:30
【问题描述】:

我发现我的 android 映像存在问题,其中命令 adb reboot bootloader 只是重新启动 android,而不是进入引导加载程序模式。

为了解决这个问题,我做了一些研究,发现实际上有两个东西,adbadbd,主机和目标设备使用 TCP 协议通过套接字进行通信。

所以,有趣的是像 adb shelladb devices 这样的命令正在工作,但 reboot bootloader 却没有。我想了解收到reboot bootloader 时的adbd 是什么。它是否会更改 boor 顺序、设置一些标志、更改 EFI vars....?

您能否指出一些好的链接或您可以分享的理解?

PS:我正在研究嵌入式设备环境,类似于树莓派...

【问题讨论】:

    标签: android embedded adb bootloader


    【解决方案1】:

    这就是adb reboot bootloader 在通过USBfastboot 模式下标准 Android 引导加载程序支持的唯一传输方式)连接的标准 Android 设备上的工作方式:

    1. adb 客户端将reboot bootloader 命令发送到adb 服务器(通过 TCP)
    2. adb 服务器将reboot bootloader 命令转发到设备上的adbd(通过USB)
    3. adbdsys.powerctl 属性设置为 reboot,bootloader
    4. sys.powerctl 更改触发 init.rc 规则运行 powerctl init 的内置
    5. _NR_reboot 系统调用
    6. 设置reboot to bootloader 标志并重新启动设备

    在下次开机时,引导加载程序会看到标志并进入fastboot 模式。但前提是USB 已连接。

    【讨论】:

    • @InsaneCoder ADBinit 等是开源的,所以你可以自己看看它是如何工作的。内核源代码有点难以挖掘,部分原因是供应商之间存在更多差异...... :-( 但大多数情况下,他们从reboot_notifier 处理程序重新启动。“引导加载程序”标志是什么,也有很大差异,并且它可能没有在某些端口上实现。
    • @Alex:感谢您提供宝贵的信息。你能告诉我在哪里可以找到这个reboot to bootloader 标志吗?第4点不完整吗? built-in什么?
    • @Alex : 哦等等...我找到了这个stackoverflow.com/questions/5472761/…
    • powerctl 是一个 init 内置命令。并且确切的重启和启动标志设置程序是特定于 SoC 的
    • 我帮不了你。每个 SoC 供应商都有不同的处理方式。这就是高通的做法android.googlesource.com/kernel/msm/+/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 2019-01-13
    • 2010-10-14
    • 2013-09-28
    • 2012-08-01
    相关资源
    最近更新 更多