概览

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

ADB(Android调试桥)

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

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

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

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

在主机安装ADB环境

ADB包含在Android SDK Platform-Tools包中,可以从 Adroid 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