USB3 调试端口¶
- 作者:
Lu Baolu <baolu.lu@linux.intel.com>
- 日期:
2017年3月
概述¶
这是关于如何在 x86 系统上使用 USB3 调试端口的指南。
在使用任何基于 USB3 调试端口的内核调试功能之前,您需要
1) check whether any USB3 debug port is available in
your system;
2) check which port is used for debugging purposes;
3) have a USB 3.0 super-speed A-to-A debugging cable.
简介¶
xHCI 调试功能 (DbC) 是 xHCI 主控制器提供的一个可选但独立的功能。xHCI 规范在第 7.6 节中描述了 DbC。
当 DbC 初始化并启用后,它将通过调试端口(通常是第一个 USB3 超高速端口)呈现一个调试设备。该调试设备完全符合 USB 框架,并提供相当于调试目标(正在调试的系统)和调试主机之间的高性能全双工串行链路。
早期 PRINTK¶
DbC 的设计目的是记录早期的 printk 消息。此功能的一个用途是内核调试。例如,当您的机器在常规控制台代码初始化之前很早就崩溃时。其他用途包括更简单的、无锁的日志记录,而不是完整的 printk 控制台驱动程序和 klogd。
在调试目标系统上,您需要自定义一个启用 CONFIG_EARLY_PRINTK_USB_XDBC 的调试内核。并且,添加以下内核启动参数
"earlyprintk=xdbc"
如果您的系统中有多个 xHCI 控制器,您可以将主机控制器索引附加到此内核参数。此索引从 0 开始。
当前设计不支持 DbC 运行时挂起/恢复。因此,您最好通过添加以下内核启动参数来禁用 USB 子系统的运行时电源管理
"usbcore.autosuspend=-1"
在启动调试目标之前,您应该将调试端口连接到调试主机上的 USB 端口(根端口或任何外部集线器的端口)。用于连接这两个端口的电缆应该是 USB 3.0 超高速 A 对 A 调试电缆。
在调试目标的早期启动期间,将检测并初始化 DbC。初始化后,调试主机应该能够枚举调试目标中的调试设备。然后,调试主机将调试设备与 usb_debug 驱动程序模块绑定,并创建 /dev/ttyUSB 设备。
如果调试设备枚举顺利进行,您应该能够在调试主机上看到以下内核消息
# tail -f /var/log/kern.log
[ 1815.983374] usb 4-3: new SuperSpeed USB device number 4 using xhci_hcd
[ 1815.999595] usb 4-3: LPM exit latency is zeroed, disabling LPM.
[ 1815.999899] usb 4-3: New USB device found, idVendor=1d6b, idProduct=0004
[ 1815.999902] usb 4-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1815.999903] usb 4-3: Product: Remote GDB
[ 1815.999904] usb 4-3: Manufacturer: Linux
[ 1815.999905] usb 4-3: SerialNumber: 0001
[ 1816.000240] usb_debug 4-3:1.0: xhci_dbc converter detected
[ 1816.000360] usb 4-3: xhci_dbc converter now attached to ttyUSB0
您可以使用任何通信程序,例如 minicom,来读取和查看消息。以下简单的 bash 脚本可以帮助您检查设置的完整性。
===== start of bash scripts =============
#!/bin/bash
while true ; do
while [ ! -d /sys/class/tty/ttyUSB0 ] ; do
:
done
cat /dev/ttyUSB0
done
===== end of bash scripts ===============
串行 TTY¶
DbC 支持已添加到 xHCI 驱动程序中。您可以在运行时获得 DbC 提供的调试设备。
为了使用此功能,您需要确保您的内核已配置为支持 USB_XHCI_DBGCAP。xHCI 设备节点下的一个 sysfs 属性用于启用或禁用 DbC。默认情况下,DbC 处于禁用状态
root@target:/sys/bus/pci/devices/0000:00:14.0# cat dbc
disabled
使用以下命令启用 DbC
root@target:/sys/bus/pci/devices/0000:00:14.0# echo enable > dbc
您可以随时检查 DbC 状态
root@target:/sys/bus/pci/devices/0000:00:14.0# cat dbc
enabled
使用 USB 3.0 超高速 A 对 A 调试电缆将调试目标连接到调试主机。您可以看到调试目标上创建了 /dev/ttyDBC0。您将看到以下内核消息行
root@target: tail -f /var/log/kern.log
[ 182.730103] xhci_hcd 0000:00:14.0: DbC connected
[ 191.169420] xhci_hcd 0000:00:14.0: DbC configured
[ 191.169597] xhci_hcd 0000:00:14.0: DbC now attached to /dev/ttyDBC0
相应地,DbC 状态已提升为
root@target:/sys/bus/pci/devices/0000:00:14.0# cat dbc
configured
在调试主机上,您将看到调试设备已被枚举。您将看到以下内核消息行
root@host: tail -f /var/log/kern.log
[ 79.454780] usb 2-2.1: new SuperSpeed USB device number 3 using xhci_hcd
[ 79.475003] usb 2-2.1: LPM exit latency is zeroed, disabling LPM.
[ 79.475389] usb 2-2.1: New USB device found, idVendor=1d6b, idProduct=0010
[ 79.475390] usb 2-2.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 79.475391] usb 2-2.1: Product: Linux USB Debug Target
[ 79.475392] usb 2-2.1: Manufacturer: Linux Foundation
[ 79.475393] usb 2-2.1: SerialNumber: 0001
调试设备现在可以工作了。您可以使用任何通信或调试程序在主机和目标之间进行通信。