全志linux开发 USB接口设置 USB Gadget接口配置Linux内核在设备端提供了Gadget Framework允许开发板虚拟成各种USB外设串口、网卡、音频设备、U盘、摄像头等。​ 适用平台Linux-4.9及同架构的全志SoCT507/H616等ACM虚拟串口NCM以太网网卡UAC1音频设备ADBAndroid Debug Bridge3.1、接口类型详解核心结构usb_gadget/g1/ ├── idVendor → 厂商 VID ├── idProduct → 产品 PID ├── strings/0x409/ → 设备字符串序列号、制造商、产品名 ├── configs/c.1/ → 配置集合可以有多个 │ ├── strings/0x409/configuration │ └── f1.acm → ../functions/acm.usb0 ├── functions/ → 功能函数目录 │ ├── acm.usb0 │ ├── ncm.usb0 │ ├── uac1.gs0 │ └── ffs.adb └── UDC → 绑定到实际 USB 控制器3.1.1、ACM Abstract Control Model — 虚拟串口​ 把USB设备虚拟为CDC ACM标准的串口PC端识别为COM口Linux端对应/dev/ttyGS0。配置关键模块CONFIG_USB_CONFIGFS_ACMy/mCONFIG_USB_F_ACMy/mCONFIG_USB_U_SERIALy/mConfigFS配置示例mkdir-p/sys/kernel/config/usb_gadget/g1/functions/acm.usb0ln-s/sys/kernel/config/usb_gadget/g1/functions/acm.usb0 /sys/kernel/config/usb_gadget/g1/configs/c.1/使用板端写echo hello /dev/ttyGS0PC端读通过串口工具打开对应COM口。典型波特率115200 ~ 921600均可延迟 1 ms。3.1.2、NCMNetwork Control Model— 虚拟网卡功能​ 将开发板虚拟为USB网卡实现主机与设备间的IP通信类似RNDIS但NCM性能更高。配置关键模块CONFIG_USB_CONFIGFS_NCMy/mCONFIG_USB_F_NCMy/mCONFIG_USB_U_ETHy/mConfigFS配置示例mkdir-p/sys/kernel/config/usb_gadget/g1/functions/ncm.usb0echo02:12:34:56:78:9a/sys/kernel/config/usb_gadget/g1/functions/ncm.usb0/dev_addrecho06:12:34:56:78:9a/sys/kernel/config/usb_gadget/g1/functions/ncm.usb0/host_addrln-s/sys/kernel/config/usb_gadget/g1/functions/ncm.usb0 /sys/kernel/config/usb_gadget/g1/configs/c.1/使用设备端会生成usb0网口ifconfigusb0192.168.42.2 upPC端设置静态IP 192.168.42.1即可ping通支持SSH、SCP、HTTP等通信。优势相比RNDISNCM采用CDC规范驱动跨平台Windows 10、Linux、macOS均支持。支持多frame打包提高带宽利用率。3.1.3、UAC1USB Audio Class 1.0功能​ 让板卡虚拟成标准USB声卡PC端识别为 “USB Audio Device”可作为录音或播放通道。配置关键模块CONFIG_USB_CONFIGFS_F_UAC1y/mCONFIG_USB_F_UAC1y/mConfigFS配置示例mkdir-p/sys/kernel/config/usb_gadget/g1/functions/uac1.gs0# 可选参数# echo 48000 /sys/kernel/config/usb_gadget/g1/functions/uac1.gs0/p_srate# echo 2 /sys/kernel/config/usb_gadget/g1/functions/uac1.gs0/p_chmaskln-s/sys/kernel/config/usb_gadget/g1/functions/uac1.gs0 /sys/kernel/config/usb_gadget/g1/configs/c.1/使用在aplay -l中会出现 “USB Audio Device”。可用ALSA接口读取或播放音频流。常用于语音输入/输出、AI语音网关、视频会议终端。注意声道和采样率受限于USB带宽。若需双向音频可启用p_*和c_*参数分别控制Playback/Capture。3.1.4、ADBAndroid Debug Bridge基于FunctionFS功能​ 通过USB实现主机ADB调试通道用于Android或 基于Android系统的Linux设备。配置关键模块CONFIG_USB_CONFIGFS_F_FSy/mCONFIG_USB_F_FSy/mConfigFS配置示例mkdir-p/dev/usb-ffs/adbmount-tfunctionfs adb /dev/usb-ffs/adbmkdir-p/sys/kernel/config/usb_gadget/g1/functions/ffs.adbln-s/sys/kernel/config/usb_gadget/g1/functions/ffs.adb /sys/kernel/config/usb_gadget/g1/configs/c.1/使用板端启动adbd/usr/bin/adbdPC端执行adb devices即可识别到设备。特性通信层基于FunctionFS速度快、稳定。可同时与ACM、NCM并存。3.1.5、配置方式打开kernel配置页面cdcdkernel/linux-4.9/makeARCHarm64 menuconfig修改usb虚拟串口相关配置路径Device Drivers → USB support → USB Gadget SupportMUSB Gadget Drivers(Serial Gadget(with CDC ACM and CDC OBEX support))---路径Device Drivers → USB support → USB Serial Converter supportMUSB driverforGSM and CDMA modems保存并退出编译并打包./build.sh kernel./build.sh pack3.2、复合设备Composite Gadget​Linux 4.9的ConfigFS支持多功能并存只需在 同一gadget下创建多个function并链接到 同一个config。典型结构functions/ ├── acm.usb0 ├── ncm.usb0 ├── uac1.gs0 └── ffs.adb configs/c.1/ ├── f1.acm -../functions/acm.usb0 ├── f2.ncm -../functions/ncm.usb0 ├── f3.uac1 -../functions/uac1.gs0 └── f4.adb -../functions/ffs.adb内核通过Composite Framework自动合并接口描述符主机端会看到多接口复合设备。3.3、工作流程与启动顺序加载核心模块modprobe libcomposite加载ConfigFS支撑挂载configfsmount -t configfs none /sys/kernel/config创建gadget目录/sys/kernel/config/usb_gadget/g1设置VID/PID、字符串信息写入idVendor和idProduct创建strings/0x409/。创建configs/c.1并设定MaxPower等参数。创建所需functionsacm/ncm/uac1/ffs.adb。符号链接 到config。绑定UDCUSB控制器ls/sys/class/udc/echomusb-hdrc.1.auto/sys/kernel/config/usb_gadget/g1/UDC解绑时echo/sys/kernel/config/usb_gadget/g1/UDC3.4、主机侧识别情况FunctionWindows识别Linux识别节点macOS识别ACMUSB Serial(COM x)/dev/ttyACM0/dev/tty.usbmodemNCMUSB以太网适配器usb0支持UAC1USB Audio DeviceALSA:card X支持ADBAndroid Composite ADB Interface/dev/bus/usb/...支持性能与延迟参考模块吞吐延迟典型备注ACM1–3 MB/s 1 ms控制台调试、AT通信NCM40–100 Mbps1–2 ms远程SSH/ADB复合UAC144.1/48 kHz 16bit 10 ms语音通道ADB10–30 MB/s1–3 ms调试、文件传输