如何从串口Shell中启用并启动“Android Debug Bridge”(adb)?

9次阅读
没有评论

问题描述

在一个嵌入式非图形界面的 Android 设备上,需要在没有屏幕和仅通过 UART 控制台的情况下启用并启动 Android Debug Bridge (adb)。目标是能够使用 adb 进行调试。

问题核心在于如何不依赖开发者设置来直接从串口 Shell 启动 adb 服务或访问 adb 命令。

解决方案

方案1: 通过系统服务启动adb

请注意以下操作可能涉及修改 Android 系统,建议备份相关文件以备不时之需。
在某些设备上,即使没有 Developer Options 开启,仍然可以通过系统的服务框架启动 adb 服务。

  1. 进入系统服务管理器或 shell 并使用如下命令尝试启动 adbd:
    shell
    start adbd

  2. 如果上述命令失败或者无反应,请在 /system/etc/init 目录下查找相关 init 脚本文件,例如 ueventd.rcinit.rc 等,并手动启用或运行 adbd 服务。

  3. 可能需要确保 /data/local/tmp 目录以读写权限存在:
    shell
    mkdir -p /data/local/tmp
    mount -o rw,remount /system

  4. 如果 adb 即使在系统启动时未自动启动,可以尝试手动启动:
    shell
    ./adbd

方案2: 通过开发者模式启用并镜像显示屏内容

  1. 虽然原始问题没有解决方法,但可以通过上述方法开启开发者模式,并使用 scrcpy 软件在电脑上显示手机屏幕进行进一步调试。

  2. 按照如下步骤在串口 Shell 中操作:

  3. 运行系统服务相关的命令来启动开发者选项设置界面。
    shell
    am start -n com.android.settings/.DevelopmentSettings

  4. 使用方向键选择“USB debugging”,再按空格进行确认。具体按键如题中所提到的:

  5. KEYCODE_DPAD_DOWN (不断下移光标)
  6. 最后一行 KEYCODE_SPACE + KEYCODE_DPAD_RIGHT + KEYCODE_SPACE

  7. 如果此时adb没有自动启动,可以尝试手动运行:
    shell
    adb start-server

方案3: 通过修改系统配置文件

  1. /init.<your_board>.rc 文件中查找并启用相关的服务:
    shell
    service adbd /system/bin/adbd
    on root
    enable bg_start

  2. 如果需要,可以通过更新 initramfs 或者内核镜像中的相应脚本来确保此项改变持久化。

通过以上方案,用户应能够更灵活地在嵌入式 Android 设备上启用 adb 命令,并进行调试工作。如果遇到具体问题可以在官方开发者文档或社区寻求更多帮助。

正文完