首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Linux USB Gadget 加載 g_serial.ko 報 "no such device" 故障排查指南

     編輯:程式設計疑難解答

問題現象

內核 3.16,按順序加載 `u_serial.ko`、`libcomposite.ko`、`usb_f_serial.ko`、`usb_f_obex.ko`、`usb_f_acm.ko` 均成功,最後加載 `g_serial.ko` 報錯:can't insert 'g_serial.ko' no such device。

原因分析

`g_serial.ko` 是 **Gadget 驅動的綁定層**,它需要將功能驅動(如 `usb_f_serial`)綁定到 **UDC(USB Device Controller)硬件控制器**上。報 "no such device" 通常意味著:

  1. UDC 驅動未加載或未正確探測到硬件:如 `musb_hdrc`、`dwc3`、`ci_hdrc` 等控制器驅動未加載,或設備樹/平台數據未正確註冊 UDC 設備。
  2. UDC 設備未在 /sys/class/udc/ 目錄下出現:可執行 `ls /sys/class/udc/` 驗證,若為空則無可用 UDC。
  3. 硬件不支持或配置錯誤:SoC 的 USB OTG 控制器未使能、時鐘未開啟、GPIO 複用錯誤等。

排查步驟

1. 確認 UDC 驅動狀態

lsmod | grep -E "musb|dwc3|ci_hdrc|udc"
ls /sys/class/udc/

若無輸出,說明 UDC 未就緒。

2. 查看內核日誌

dmesg -T | grep -i -e udc -e gadget -e usb -e musb -e dwc3

關注 `udc_core: probe failed` 或 `failed to register gadget` 等錯誤。

3. 檢查設備樹 / 平台數據

  • 確認 `.dts` 中 `usb@...` 節點 `dr_mode = "peripheral"` 或 `"otg"`。
  • 確認 `status = "okay"`,時鐘、電源域、PHY 引用正確。

4. 手動綁定測試(調試用)

若 UDC 存在(如 `musb-hdrc.0.auto`),可嘗試手動綁定:

echo "musb-hdrc.0.auto" > /sys/class/udc/musb-hdrc.0.auto/udc_name  # 視內核版本而定
# 或
echo "g_serial" > /sys/class/udc/musb-hdrc.0.auto/udc_name

常見解決方案

  • 加載對應 SoC 的 UDC 控制器驅動(如 `modprobe musb_hdrc` `modprobe musb_dsps`)。
  • 內核配置啟用 `CONFIG_USB_GADGET`、`CONFIG_USB_G_SERIAL`、`CONFIG_USB_MUSB_HDRC` 等。
  • 檢查 VBUS 檢測 GPIO、ID 引腳上拉下拉電阻硬件連接。

參考資源

  • Kernel 文檔:`Documentation/usb/gadget_serial.txt`
  • Linux USB Gadget API 系列教程

核心結論:**無 UDC 設備,Gadget 功能驅動無處綁定**,必須先解決 UDC 探測註冊問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved