2.4. 连接开发板

本章旨在为用户提供连接开发板的详细说明。介绍通过串口、USB和网口三种方式连接开发板,提供相应的驱动安装、操作指南和注意事项。

提示:

  • 开发板的默认用户名为root,密码为root

  • 本章节涉及的所有驱动和软件包,既可通过 software_tools 页面在线下载,也可在 SDK 交付包的 software_tools 目录中直接获取。

2.4.1. 通过串口连接

串口作为开发板最基础的调试接口,在功能调试、镜像升级等场景时,经常需要使用。

2.4.1.1. 硬件连接

X5 EVB 开发板硬件上已经支持了串口转USB芯片(CH340N),用户使用一根 Micro USB 2.0 数据线将开发板连接到个人电脑(PC)上,在PC上安装好 CH340N 驱动即可使用。接口见功能模块布局中的接口 19,如下图所示:

image-20240411141146046

2.4.1.2. Windows上使用串口

安装驱动

在Windows上使用串口功能时,需要先安装CH340驱动,用户可在SDK交付包 software_tools/serial_to_usb_drivers 目录找到对应的驱动,完成驱动安装后,在设备管理器中可以查看到如下图所示的COM设备:

image-20220214144812977

连接使用

PC 上常用的调试工具有 Putty、MobaXterm、SecureCRT 等,用户可以根据使用习惯选择。不同工具的端口配置流程基本类似,本文以 SecureCRT 为例,介绍新建串口连接的过程。

PC 端串口工具的端口配置参数如下:

  • 波特率(Baud rate):115200

  • 数据位(Data bits):8

  • 奇偶校验(Parity):None

  • 停止位(Stop bits):1

  • 流控(Flow Control):无

1、点击 Quick Connect 按钮,打开创建窗口

image-20220309103341869

2、在 Quick Connect 对话框中,选择 ProtocolSerial,选择 Port 为识别到的 COM 口,例如 COM12, 然后根据上文的端口配置参数进行设置

image-20220215153207781

3、点击 Quick Connect 对话框的 Connect 按钮完成连接

image-20220215153135685

4、输入用户名 root,密码 root 即可登录设备

2.4.1.3. Ubuntu 上使用串口

Ubuntu 操作系统一般会自带 USB-串口 转换驱动,开发板串口接上 PC 后,会生成 /dev/ttyUSB*(* 代表数字) 设备节点。

在 Ubuntu 上可以使用 minicom,picocom 等软件连接串口,以下以 minicom 为例,介绍使用方法。

使用 minicom

sudo apt-get install minicom

连接好串口线后,执行 ls /dev/ttyUSB* 确认串口设备节点,下面示例是 /dev/ttyUSB0

$ ls /dev/ttyUSB*
/dev/ttyUSB0

使用 sudo 权限运行 minicom:

$ sudo minicom -D /dev/ttyUSB0
Welcome to minicom 2.7.1

OPTIONS: I18n
Compiled on Dec 23 2019, 02:06:26.
Port /dev/ttyUSB0, 11:55:56

Press CTRL-A Z for help on special keys

以上提示 CTRL-A Z 是转义键,按 Ctrl-A 后松开,然后再按 Z 就可以调出帮助菜单。

   +-------------------------------------------------------------------+
                          Minicom Command Summary                      |
  |                                                                    |
  |              Commands can be called by CTRL-A <key>                |
  |                                                                    |
  |               Main Functions                  Other Functions      |
  |                                                                    |
  | Dialing directory..D  run script (Go)....G | Clear Screen.......C  |
  | Send files.........S  Receive files......R | cOnfigure Minicom..O  |
  | comm Parameters....P  Add linefeed.......A | Suspend minicom....J  |
  | Capture on/off.....L  Hangup.............H | eXit and reset.....X  |
  | send break.........F  initialize Modem...M | Quit with no reset.Q  |
  | Terminal settings..T  run Kermit.........K | Cursor key mode....I  |
  | lineWrap on/off....W  local Echo on/off..E | Help screen........Z  |
  | Paste file.........Y  Timestamp toggle...N | scroll Back........B  |
  | Add Carriage Ret...U                                               |
  |                                                                    |
  |             Select function or press Enter for none.               |
  +--------------------------------------------------------------------+

根据提示按 O 进入设置界面,如下:

           +-----[configuration]------+
           | Filenames and paths      |
           | File transfer protocols  |
           | Serial port setup        |
           | Modem and dialing        |
           | Screen and keyboard      |
           | Save setup as dfl        |
           | Save setup as..          |
           | Exit                     |
           +--------------------------+

把光标移动到 Serial port setup,按 Enter 键进入串口设置界面,再输入提示的字母,选择对应的选项,然后根据上文的端口配置参数进行设置,如下所示:

   +-----------------------------------------------------------------------+
   | A -    Serial Device      : /dev/ttyUSB0                              |
   | B - Lockfile Location     : /var/lock                                 |
   | C -   Callin Program      :                                           |
   | D -  Callout Program      :                                           |
   | E -    Bps/Par/Bits       : 115200 8N1                               |
   | F - Hardware Flow Control : No                                        |
   | G - Software Flow Control : No                                        |
   |                                                                       |
   |    Change which setting?                                              |
   +-----------------------------------------------------------------------+

注意: Hardware Flow ControlSoftware Flow Control 都要设成 No,否则可能导致无法输入。

设置完成后按Enter键回到上一菜单,选择 Save setup as dflEnter 键即可保存为默认配置,以后将默认使用该配置。

2.4.2. 通过网口连接

开发板支持一路千兆以太网,模块接口见功能模块布局中的接口 4,用户可以通过网络(SSH等)远程登录开发板。开发板默认支持 SSH2 通信协议。

用户可以选择以下两种网络接入方式之一:

  • 开发板与 PC 直连。为避免网络环境造成的额外干扰,本文推荐用户优先使用 PC 直连方式。

  • 开发板和 PC 同时接入局域网。由于开发板默认不使用 DHCP 功能,因此接入局域网时,需要确认局域网是否支持设置静态 IP。

为保证正常的网络通信,用户需要确认开发板、PC 网络配置可以满足如下要求:

  • 两者的 IP 地址处于同一网段(简单来说就是 IP 地址的前几段需要相同),例如开发板的IP:192.168.1.10、PC的IP:192.168.1.100

  • 两者的子网掩码(255.255.255.0)、网关(192.168.1.1)保持一致

  • 关闭 PC 的网络防火墙

如果用户需要确认开发板网络配置状态,可以执行 ifconfig 命令查询。当前开发板默认的网络配置如下:

  • IP 地址:192.168.1.10

  • 掩码:255.255.255.0

  • 网关:192.168.1.1

如果用户想要配置开发板网络,可以执行 ifconfig <target eth dev> <target ip> netmask <target netmask> 来配置,例如说,配置开发板的 eth0 设备的 IP 地址为 192.168.1.110,掩码为 255.255.254.0,那么应当执行:ifconfig eth0 192.168.1.110 netmask 255.255.254.0。更多命令细节,请参考 ifconfig Manual Page

如果用户想要配置开发板的网关,请参考 route Manual Page

确认开发板网络配置后,需要对PC的网络进行参数配置。

2.4.2.1. Windows 网络配置

以配置 PC 的 IP 为如下值为例:

  • IP 地址:192.168.1.100

  • 掩码:255.255.255.0

  • 网关:192.168.1.1

配置步骤为:

1、在网络连接中找到对应的以太网设备并双击打开;

2、找到Internet协议版本4选项并双击打开;

3、在下图红框位置填入对应的网络参数,然后点击确定。

image-ETH-ipconfig

2.4.2.2. Ubuntu 网络配置

以配置 PC 的 IP 为如下值为例:

  • IP 地址:192.168.1.100

  • 掩码:255.255.255.0

  • 网关:192.168.1.1

配置步骤为:

1、在 Ubuntu 界面打开 系统设置 -> 点击网络 -> 在 有线连接 中找到与板端连接的网口(如果 PC 和板端之间不是直连,请查看与板端通讯的网口),点击后面的小齿轮

2、在弹出的界面中,切换到IPv4,进行设置

3、选择手动,设置地址、子网掩码、网关,点击应用,重启网络即可

image-ETH-ipconfig

网络配置完成后,需要确认开发板、PC 机是否可以双向 ping 通,如果 ping 不通,需要按照网络配置要求检测配置过程是否有误。

2.4.2.3. 终端软件配置

PC 上常用的调试工具有 Putty、MobaXterm、SecureCRT 等,用户可以根据使用习惯选择。不同工具通过网络连接开发板的过程基本类似,本文以 SecureCRT 为例,介绍新建网络连接的过程。

1、点击 Quick Connect 按钮,选择 ProtocolSSH2

2、填写 Hostname开发板IP地址(192.168.1.10), SSH2 方式需要额外填写 Usernameroot

image-ETH-Telnet image-ETH-SSH2

3、其他配置保持默认并点击 Connect 按钮完成创建

4、Telnet 登陆时需要用户输入用户名(root)和密码(root)

5、SSH2 登陆时需要用户输入密码(root)

2.4.3. 通过 USB 口连接

开发板上配备了一个 Micro USB 2.0 接口,模块接口见功能模块布局中的接口 5,默认配置为 Device 模式。该接口支持多种功能,包括已默认启用的 ADB,以及 Fastboot、DFU、RNDIS、ECM 等协议。

2.4.3.1. Windows 上安装软件

安装 USB 驱动

对于 Windows 操作系统,在使用 adbfastboot 功能前,需要首先确认是否安装了对应的驱动程序。

在开发板的 uboot 命令行下输入 fastboot 0,让开发板进入 fastboot 模式:

U-Boot 2022.10-gc52e405209 (Nov 26 2024 - 14:20:51 +0800)

Model: Horizon X5
... (省略) ...
Hit any key to stop autoboot:  0
Hobot>
Hobot>fastboot 0
select emmc(0) as flash medium
do fastboot usb

未安装驱动时,设备管理器会提示存在 USB download gadget 的未知设备,如下图:

image-20220214144850602

此时,用户需要使用 SDK 交付包中 software_tools\winusb_drivers\sunrise5_winusb.zip 压缩包,进行驱动安装,步骤如下:

1、解压 sunrise5_winusb.zip

2、进入 sunrise5_winusb,右键点击 install_driver.bat,选择以管理员身份运行

成功安装驱动后,设备管理器会显示 Android Device 设备,如下图:

image-20220309105416913

安装 USB 工具

在 SDK 交付包中找到 software_tools\adb_and_fastboot\platform-tools_r34.0.5-windows.zip 文件。按照以下步骤完成软件安装和环境变量设置:

  • 选择一个不带 空格、中文、特殊字符 的文件夹解压 platform-tools_r34.0.5-windows.zip,例如解压到 D:\platform-tools

image-20220425194733026

  • 打开 Windows 系统的高级环境配置,把这两个工具包的路径添加到环境变量中。

image-20220425195125259

正确配置了环境变量之后,打开命令提示符,执行 adb --versionfastboot --version 即可查看到两个工具软件的版本号。

image-20240314142602339

提示:

如果需要使用 ramdump 调试功能,需要安装 software_tools\adb_and_fastboot\fastboot.tar.gz 里面的 fastboot工具,该 fastboot 支持 oem ramdump 命令。

2.4.3.2. Ubuntu 上安装软件

安装 USB 驱动

Ubuntu 等 Linux 主机以上驱动都是免驱的, 无需特别安装驱动。

苹果电脑类 Linux, 大部分是免驱的。

Ubuntu 主机需要配置 udev 规则, 请参考以下配置,否则需要 sudo 权限才能操作 dfu, fastboot 等设备

  • 配置 udev 规则, 拷贝 software_tools/adb_and_fastboot/51-drobotics-usb.rules/etc/udev/rules.d 目录中

    sudo cp software_tools/adb_and_fastboot/51-drobotics-usb.rules /etc/udev/rules.d
    
  • 使能新规则

    sudo udevadm control --reload-rules
    sudo udevadm trigger
    
  • 将用户添加到 plugdev 组

    sudo usermod -aG plugdev $(whoami)
    
  • 重新登录 shell,通过 groups 命令查看用户组列表

安装 USB 工具

运行以下命令以在 Ubuntu 系统上安装 adb 、 fastboot 以及 dfu:

sudo apt install android-tools-adb
sudo apt install android-tools-fastboot
sudo apt-get install dfu-util

执行 adb --version 命令检查 adb 版本:

$ adb --version
Android Debug Bridge version 1.0.39
Version 1:8.1.0+r23-5ubuntu2
Installed as /usr/lib/android-sdk/platform-tools/adb

执行 fastboot --version 命令检查 fastboot 版本:

$ fastboot --version
fastboot version 1:8.1.0+r23-5ubuntu2
Installed as /usr/lib/android-sdk/platform-tools/fastboot

执行 dfu-util --version 命令检查 dfu 版本:

$ dfu-util --version
dfu-util 0.9

Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2016 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/

提示: 如果需要使用 ramdump 调试功能,需要安装 software_tools\adb_and_fastboot\fastboot.tar.gz 里面的 fastboot工具,该 fastboot 支持 oem ramdump 命令。

2.4.3.3. 使用 adb

开发板启动后会自动启动 adbd 服务,开发板与 PC 通过 USB 连接后,可以使用 adb shell 进行调试。

将开发板 Micro USB 接入 PC 后,设备管理器会识别到开发板 adb 设备 Andoroid Composite ADB Interface,如下图:

image-USB-xj3

除了查看设备管理器端口,用户也可以通过 adb devices 命令确认 PC机 是否识别到adb设备,正常识别状态如下图:

image-20220309121640583

未识别到 adb 设备通常有两种可能性:

  • 用户使用的 Micro USB 数据线不支持数据通信,PC 无法完成设备的识别;

  • 开发板未启动 adbd 服务。

用户可按如下步骤进行排查:

  • 通过串口或者网口登陆开发板,执行 ps | grep adbd 命令,确认 adbd 进程是否启动;

  • 如果 adbd 进程未启动,使用命令/etc/init.d/usb-gadget.sh restart adb启动服务,启动 log 如下:

    Detecting platform:
    board : Horizon Robotics X5 SOM board
    udc   : 35300000.dwc3
    ... (省略) ...
    OK
    Creating Config
    Init functions...
    funciton_init, but do nothing, please init on[  378.910299] file system registered
    demand
    OK
    Bind functions...
    Bind functions according to .usb-config file
    bind adb...
    ... (省略) ...
    Binding USB Device Controller
    OK
    Run some userspace daemons(eg. usb_camera)...
    usb-gadget start succeed.
    usb-gadget restart succeed.
    
  • 如果 adbd 进程启动后 PC 机仍无法识别 adb 端口,则用户需要自行确认 Micro USB 数据线是否存在异常。

常用命令

adb shell
adb pull
adb push

# adb shell 目前没有 export 相关环境变量,需要做一下配置,否则部分程序会因为缺少环境变量而无法运行,以下两种方法都可以解决问题
# 方法一: 连接上后手动 source /etc/profile
adb shell
source /etc/profile

# 方法二:按下述方法操作, export 相关环境变量,这种方式存在 tab 无法使用的缺点
adb shell "ENV=/etc/profile sh -i"

2.4.3.4. 使用 fastboot

fastboot 主要用来通过 USB 给开发板升级软件,以下介绍两种让开发板进入 fastboot 模式的方法:

  • 方法一:启动开发板进入 shell 后,执行 reboot -m usb2 -f 命令,重启设备后,开发板会自动进入 fastboot 模式;

    # reboot -m usb2 -f
    155.850561] reboot: Restarting system with command 'usb2'
    ... (省略) ...
    boot action: FASTBOOT USB2.0
    select emmc(0) as flash medium
    do fastboot usb
    
  • 方法二:启动开发板进入 uboot 命令行模式后,执行 fastboot 0 命令让开发板进入 fastboot 模式;

    U-Boot 2022.10-gc52e405209 (Nov 26 2024 - 14:20:51 +0800)
    
    Model: Horizon X5
    ... (省略) ...
    Hit any key to stop autoboot:  0
    Hobot>
    Hobot>fastboot 0
    select emmc(0) as flash medium
    do fastboot usb
    

最简便的是使用如下命令,整体烧录系统镜像:

 fastboot flash addr:0x0 emmc_disk.simg

烧写完成后,主机 PC 端执行 fastboot reboot 命令重启或者开发板断电重启,使升级生效。

整体烧录系统镜像的过程图示如下所示:

usb_fastboot_usage

支持按传统的分区方式进行烧录:

fastboot flash uboot uboot.img          # 烧录uboot分区
fastboot flash miniboot miniboot.img    # 烧录miniboot分区
fastboot flash boot boot.img            # 烧录boot分区
fastboot flash system system.img        # 烧录system分区

注意:

  • 烧录 miniboot_all 时不能按分区名 miniboot 进行烧录,需要使用 flash addr:0x0命令,如:

fastboot flash addr:0x0 miniboot_all.img

原因: 由于 miniboot_all.img 指的是包含 UBoot 分区之前的所有镜像,也就是 miniboot.img 和分区表与 misc 分区,如果想一起更新 miniboot 和分区表,它需要像更新 emmc_disk.simg 一样从 addr:0x0 开始写,不能指定 miniboot 分区烧录。

  • 建议个人电脑(PC)和开发板通过 USB 数据线直连。中间不要通过 USB hub 转接,否则有可能影响传输稳定性,导致升级失败。

2.4.3.5. 使用 dfu

dfu 主要用来通过 USB 给开发板升级软件。

开发板进入 uboot 命令行模式后,执行 dfu 0 命令让开发板进入 dfu 模式。如果存储介质(eMMC、Nand flash)上没有烧录过镜像,不存在正常可以使用的分区表信息,请执行 run dfu_emmc 命令。

U-Boot 2022.10-gca2c6582a0 (Mar 13 2024 - 19:04:15 +0800)

Model: Horizon X5
... (省略) ...
Hobot>dfu 0
DFU alt info setting: done

PC 端查看分区, 通过 -a 选择对应的类型进行整体烧录或分区烧录:

dfu-util -l

例如, 我们参考示例的镜像分区表如下图:

usb_dfu_list

整体烧录系统镜像:

dfu-util -a 0 -D emmc_disk.img

# 如果主机端有多个dfu设备, 例如有些笔记本的相机也是一个dfu设备, 则可以采用-d参数指定设备id进行选定, 命令如下:
# 逗号是必须的, dfu分为run-time形态和dfu形态, 需要逗号后的id来匹配dfu形态设备
dfu-util -d,3652:0530 -a 0 -D emmc_disk.img

整体烧录系统镜像的过程图示如下所示:

usb_dfu_usage

按分区烧录:

# 实际分区号, 即-a后的序号请参考dfu-util -l列出来的分区信息
dfu-util -a 2 -D uboot.img                      # 烧写uboot分区
dfu-util -a 5 -D boot.img                       # 烧写boot分区
dfu-util -a 6 -D system.img                     # 烧写system分区

2.4.3.6. 虚拟网卡介绍

当涉及 USB 虚拟网卡时,通常会遇到 RNDIS(Remote NDIS)和 CDC-ECM(Ethernet Control Model)两种协议。它们各自具有不同的用途和应用场景:

1、RNDIS(Remote NDIS):

  • 简要介绍: RNDIS (Remote network Driver Interface Specification) 协议是微软对于 CDC-ECM 的变种实现,主要用于简化 Windows 平台中 USB 网络设备的驱动开发。

  • 用法: RNDIS 常用于连接嵌入式系统或移动设备到计算机,以提供网络连接。

  • RNDIS 数据传输模型很复杂,每个 USB 消息都包含了多个以太网包, RNDIS 默认期待自己作为 USB 配置中的唯一功能, 所以对于 USB 复合设备需要注意,RNDIS 它期待自己是第一个 usb 配置

2、CDC-ECM(Ethernet Control Model):

  • 简要介绍: Ethernet Control Model 是另一种用于 USB 设备和主机之间进行网络通信的协议。它允许将 USB 设备模拟为一个以太网适配器,实现了对网络层(OSI 模型中的第三层)的透明访问。

  • 用法: ECM 通常用于嵌入式系统或其他设备,特别是在需要直接在 USB 上运行网络协议栈的场景下。相比 RNDIS,ECM 通常具有更低的复杂度和更少的开销,因为它不需要模拟 TCP/IP 协议栈。

2.4.3.7. 虚拟网卡(rndis)

开发板进入到系统后,执行以下命令启动 rndis:

/etc/init.d/usb-gadget.sh restart rndis

Windows10 免驱,PC 和开发板通过 USB 线连接后,会生成网卡节点。

在 Windows 上配置 Remote NDIS 网卡的 IP 地址,以及在开发板上配置 usb0 网卡的 IP 地址,并执行 ping 测试,具体步骤如下:

配置Remote NDIS网卡的IP地址(在PC上):

1、打开网络连接设置: 在Windows系统中,右键点击任务栏中的网络连接图标(通常是Wi-Fi或以太网图标),然后选择打开网络和Internet设置

2、进入网络设置:网络和Internet设置窗口中,选择更改适配器选项

3、找到Remote NDIS连接:网络连接窗口中,找到并右键点击Remote NDIS连接,然后选择属性

4、配置IP地址:本地连接属性窗口中,双击Internet 协议版本 4 (TCP/IPv4)或选中后点击属性

5、手动配置IP地址:Internet 协议版本 4 (TCP/IPv4)属性窗口中,选择使用以下 IP 地址,然后输入IP地址、子网掩码和默认网关。通常情况下,你可以设置Remote NDIS网卡的IP地址为一个局域网中未被使用的地址,例如:IP地址为192.168.10.133,子网掩码为255.255.255.0,网关可以为空或者是局域网中的路由器IP地址。

6、保存配置: 输入完毕后,点击确定按钮保存配置并关闭所有窗口。

配置usb0网卡的IP地址(在开发板上):

1、登录开发板: 通过串口、SSH 或其他方式登录到开发板的命令行界面。

2、配置IP地址: 执行 ifconfig usb0 192.168.10.111 命令配置开发板的 usb0 的 IP 地址

执行ping测试:

1、确认网络连接: 确保 PC 和开发板连接通过 USB,并且 Remote NDIS 和 usb0 网卡已经配置了正确的 IP 地址。

2、在PC上执行ping命令: 打开命令提示符,输入命令 ping 192.168.10.111 (假设开发板的IP地址为 192.168.10.111),然后按回车键执行。

3、检查ping测试结果: 如果 ping 命令能够成功执行并显示类似 来自 192.168.10.111 的回复 的信息,说明 PC 和开发板间的网络连接正常。

配置信息以及测试信息如下图所示:

usb_rndis_usage

2.4.3.8. 虚拟网卡(cdc-ecm)

开发板进入到系统后,执行以下命令启动 ecm:

/etc/init.d/usb-gadget.sh restart ecm

网络配置和使用可以参考 虚拟网卡-rndis

2.4.3.9. 更多功能

执行 /etc/init.d/usb-gadget.sh --help 命令了解更多功能:

root@buildroot:~# /etc/init.d/usb-gadget.sh --help
USB2.0 Gadget
Detecting platform:
 board : D-Robotics X5 EVB LP4 1_B board
 udc   : 35300000.usb
Usage: /etc/init.d/usb-gadget.sh {start|stop|restart} [options]
 options:
 detail gadget-composite config, using .usb/.default-config in default
      adb                         launch adbd
      msd                         run as gadget mass storage device
      msd-ram                     run as gadget mass storage device(with ddr storage)
      hid                         run as hid gadget
      rndis                       run as rndis gadget
      ecm                         run as cdc ether gadget
      uvc                         run as uvc gadget
      uac1                        usb audio class specification 1
      uac2                        usb audio class specification 2
      uvc-hid                     uvc + hid composite gadget
      uvc-uac1                    uvc + uac1 composite gadget
      uvc-uac2                    uvc + uac2 composite gadget
      uvc-hid-uac1                uvc + hid + uac1 composite gadget
      uvc-hid-uac2                uvc + hid + uac2 composite gadget
      uvc-rndis                   uvc + rndis composite gadget
      uvc-ecm                     uvc + cdc ether composite gadget
      uvc-acm                     uvc + acm(serial) composite gadget
      uvc-rndis-uac1              uvc + rndis + uac1 composite gadget
      uvc-rndis-uac2              uvc + rndis + uac2 composite gadget
      uvc-ecm-uac1                uvc + ecm + uac1 composite gadget
      uvc-ecm-uac2                uvc + ecm + uac2 composite gadget
      rndis-hid                   rndis + hid composite gadget
      rndis-uac1                  rndis + uac1 composite gadget
      msd-uac1                    msd + uac1 composite gadget
      hid-uac1                    hid + uac1 composite gadget
      uvc-adb                     uvc + adb composite gadget
      rndis-adb                   rndis + adb composite gadget
      hid-adb                     hid + adb composite gadget