在 Linux 2.6.32 內核中添加 CDC ECM 驅動模組,依手冊配置 make menuconfig 後編譯報錯(具體錯誤日誌需查看圖片,常見為符號未定義、頭文件缺失、Kconfig 依賴不滿足)。
linux-2.6.32/drivers/usb/net/cdc_ecm.c)。若手動複製 .c/.h 文件,易漏掉 Kconfig、Makefile 修改。# 必須先啟用
CONFIG_USB=y
CONFIG_USB_NET_DRIVERS=y
CONFIG_USB_USBNET=y
# 再啟用目標驅動
CONFIG_USB_NET_CDC_ECM=y (或 =m 為模組)
缺少中間依賴會導致 Kconfig 隱藏選項或編譯期缺少符號。<linux/usb/cdc.h>、<linux/usb/usbnet.h>,確認內核源碼樹完整,make modules_prepare 生成 Module.symvers。make V=1 2>&1 | tee build.log,搜尋 error: 而非 warning:。arm-none-linux-gnueabi-gcc 版本與內核編譯版本匹配,ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- 參數正確。| 錯誤類型 | 典型日誌 | 解決方案 |
|---|---|---|
| 隱式函數聲明 | implicit declaration of function 'usbnet_get_endpoints' | 缺少 #include <linux/usb/usbnet.h> 或內核版本過舊無此 API,需移植較新 usbnet 核心 |
| 未定義引用 | undefined reference to 'cdc_parse_cdc_header' | CONFIG_USB_CDC_COMPOSITE 未開啟,或 drivers/usb/class/cdc-acm.c 未編譯 |
| Kconfig 缺失 | config USB_NET_CDC_ECM not found | 驅動目錄無 Kconfig 或未在上層 drivers/usb/net/Kconfig 中 source |
| 模組授權 | module license 'Proprietary' taints kernel | 驅動源碼 MODULE_LICENSE("GPL"),否則 GPL-only 符號不可用 |
# 編譯成功後
insmod cdc_ecm.ko
dmesg | tail -20
# 應見 "cdc_ecm: USB CDC ECM driver registered"
# 插入模組後
lsusb -t # 確認接口綁定 cdc_ecm
ifconfig -a # 出現 usb0/eth1 等網卡
Documentation/usb/、Documentation/networking/Readme.txt/Porting_Guide.pdf建議:優先使用廠商提供的完整內核源碼樹(已打驅動補丁)直接編譯,而非手動合併文件。若必須手動移植,採用 git diff 對比官方內核與廠商內核的 drivers/usb/net/ 目錄差異,批次應用補丁。