USB3 除錯埠

作者:

Lu Baolu <baolu.lu@linux.intel.com>

日期:

2017年3月

通用

這是一個關於在 x86 系統上使用 USB3 除錯埠的 HOWTO。

在使用任何基於 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

除錯裝置現在可以工作了。 您可以使用任何通訊或除錯程式在主機和目標之間進行通訊。