概览

本章介绍如何在主机和目标板上设置 ADB(Android 调试桥)和 GDB(GNU 项目调试器)环境。

ADB(Android 调试桥)

ADB 是一种多功能命令行工具,可以让你与设备进行通信。adb 命令支持多种设备操作,并提供对 Unix shell 的访问,使你能够在设备上运行各种命令。它是一个客户端-服务器程序,由以下三个组件组成:

  • 客户端:发送指令。客户端运行在你的开发机器上。

  • 守护进程(adbd):在设备上运行命令。守护进程作为后台进程在设备上运行。

  • 服务器:管理客户端和守护进程之间的通信。服务器作为后台进程运行在你的开发机器上。

在主机安装 ADB 环境

ADB 包含在 Android SDK Platform-Tools 包中,可以从 Android Studio SDK build tools 下载。

Windows

  1. 在主机上下载 ADB。

  2. 在主机上安装环境变量。

    1. 右键点击 此电脑, 然后选择 属性 > 高级系统设置 > 环境变量.

    2. 编辑 Path ,创建一个新的环境变量并输入 ADB 路径( adb.exe 位于 platform-tools, 例如 D:\adb\aosp-sdk-platform-tool), 点击保存.

  3. 检查主机上的 ADB 环境。

    打开 windows 命令行, 输入 adb –help, 如果显示了 ADB 版本和全局选项,则表示主机上的环境设置正常。

Linux

  1. 在主机上下载 ADB。

  2. 将 ADB 路径导出到 shell 环境。

    export PATH=/xyz/platform-tools/bin:$PATH to .bashrc
    

在目标板上安装 ADB 环境

ADB 支持 TCP/IP 和 USB 协议,您可以通过 Wi-Fi 或 USB 线调试目标设备。

USB 模式

  1. 用 USB 线连接主机和目标板,并将设备设置为 USB 模式。

  2. 执行 /bin/usb.sh usbd_adb 切换 USB 模式并在目标板上启动 adbd 守护进程。

    $/bin/usb.sh usbd_adb
    

TCP/IP 模式

  1. 设置 Wi-Fi 连接,确保主机和目标板之间的 ping 通畅。

  2. 在目标板上启动 adbd 守护进程。

    /bin/adbd &
    

如何使用 ADB

连接 ADB

  • USB 模式

    在板上执行上述命令后,主机可以使用命令 adb devices 来显示已连接的设备。

  • TCP/IP 模式

    使用命令 adb connect 连接目标设备。连接成功后,主机可以使用命令 adb devices 来显示已连接的设备。

    $adb connect <board_ip>:5555
    $adb devices
    

ADB 命令

在主机上,命令 adb --help 可以显示所有的 ADB 命令,如下所列。

adb devices:

显示所有设备的连接状态。

adb start-server:

启动 ADB 服务器。

adb kill-server:

停止 ADB 服务器。

adb connect ip:5555:

将设备以 TCP/IP 模式连接。

adb push <local> <remote>:

将特定文件从主机推送到设备。

<local>:

表示存储在主机中的文件位置。

<remote>:

表示需要推送到板上的目标位置。

示例:

$adb push ~/system/lib/libfoo_bar.so /lib/
adb pull <remote> <local>:

将特定文件从设备拉取到主机。

<remote>:

表示需要从板上复制到主机的文件。

<local>:

表示在主机中存储文件的位置。

示例:

$adb pull /lib/libfoo_bar.so ~/system/lib/
adb shell:

Windows 命令行或 Linux Shell 可以进入设备命令行。使用 exit 返回到 Windows 命令行或 Linux Shell。

快速启动(fastboot)

fastboot 协议是一种通过 USB 与引导程序进行通信的机制。它旨在将固件下载到 Flash 存储器中。通常,固件会存储在 Flash 中,然后加载到 RAM 以启动系统。fastboot 允许用户将固件下载到 RAM 并重启设备,或者将固件烧录到 Flash 中。

本节介绍如何使用 fastboot 将固件下载到目标板的 RAM 中。

在目标板上安装 fastboot 环境

  1. 要在 U-boot 中启用 fastboot,应为 U-Boot 启用以下配置。在 SDK 中,这些配置默认是启用的。

    CONFIG_FASTBOOT=y
    CONFIG_CMD_FASTBOOT=y
    USB_FUNCTION_FASTBOOT=y
    CONFIG_USB_FUNCTION_FASTBOOT=y
    CONFIG_ANDROID_BOOT_IMAGE=y
    CONFIG_ANDROID_BOOT_IMAGE_CHECK=n
    CONFIG_ANDROID_IMAGE_HEADER_LENGTH=0x800
    CONFIG_FASTBOOT_FLASH_NAND=y
    CONFIG_FASTBOOT_BUF_ADDR=0x60380000
    CONFIG_FASTBOOT_BUF_SIZE=0xF00000
    CONFIG_DM_USB_GADGET=y
    CONFIG_USB_GADGET=y
    CONFIG_USB_GADGET_VENDOR_NUM=0x18D1
    CONFIG_USB_GADGET_PRODUCT_NUM=0x4E21
    CONFIG_USB_GADGET_MANUFACTURER="realtek"
    CONFIG_USB_GADGET_DWC2_OTG=y
    CONFIG_USB_GADGET_VBUS_DRAW=200
    CONFIG_USB_GADGET_DOWNLOAD=y
    
  2. 在系统启动时及时输入任意内容以进入 U-Boot 命令行模式。

在主机上安装 fastboot 环境

platform-tools_r34.0.0-windows.zip 下载适用于 Windows 的 fastboot 工具并解压,启动一个命令窗口并切换到 fastboot 程序所在的目录。

如何使用 fastboot

  1. 在目标板的 U-boot 上启动 fastboot。

    => fastboot usb 0
    
  2. 在主机上启动 fastboot 客户端,输入命令 fastboot.exe devices ,如果显示以下信息,则 fastboot 运行成功。

    => fastboot.exe devices
    0123456789AB  fastboot
    
  3. 继续输入命令 fastboot.exe boot d:kernel.img ,将内核固件加载到 RAM 中。它将显示如下信息。

    => fastboot.exe boot D:\kernel.img
    creating boot image...
    creating boot image - 3596288 bytes
    Sending 'boot.img' (3512 KB)                       OKAY [  0.111s]
    Booting                                            OKAY [  0.000s]
    Finished. Total time: 0.549s
    
  4. uboot 将显示以下日志,表示下载到 RAM 的状态,并从 RAM 地址启动。

    => fastboot usb 0
    Starting download of 3596288 bytes
    ...........................
    downloading of 3596288 bytes finished
    Booting kernel at 0x60380000...
    ## Booting kernel from Legacy Image at 60380000 ...
    Image Name:   Linux-5.4.63
    Created:      2023-03-08  11:59:51 UTC
    Image Type:   ARM Linux Kernel Image (uncompressed)
    Data Size:    3593416 Bytes = 3.4 MiB
    Load Address: 60388000
    Entry Point:  60388000
    Verifying Checksum ... OK
    Loading Kernel Image ……
    

更多有关 fastboot 的细节,请参考 Android-specific doc