Linux支持连接各种USB从设备,同时也支持自己作为设备插入到其他主机当中。最典型的例子就是Android OS的手机,插入电脑可以被识别为U盘之类的设备。
对于SOC来说,这部分直接对应了USB Device部分的操作。
为了避免与作为主机时支持的"设备驱动 (USB Device Driver)"一词混淆, Linux给这部分的实现取名为"Gadget" (小玩具)。内核源码的目录为\drivers\usb\gadget,里面包含了内核所支持的不同类型的USB Device Controller (UDC)驱动的实现,以及框架和不同gadget的实现。
以AT91 ARM9为例,最底层的驱动为at91_udc.c(对于支持高速USB 2.0的SOC是atmel_usba_udc.c),它实现了gadget.h定义的统一接口,然后上层的各种gadget driver(如serial.c等)调用这一套统一的接口去实现不同类型的功能,如USB串口、U盘、USB以太网等等。
Atmel USB串口的框架图:

用如下命令配置kernel configure以supportGadget serial
1 copy kernel configure 文件到当前目录下的obj目录
2 配置obj目录下的configure文件
3 将配置好的configure文件保存为.config
4 copy .config文件至linux kernel的conifg目录下
make mtxxxx_smp_mod_dbg_defconfig ARCH=arm O=obj/ mtxxxx_smp_mod_dbg_defconfig
make menuconfig ARCH=arm O=obj/mtxxxx_smp_mod_dbg_defconfig

本文介绍了如何在Linux系统中将USB配置为Gadget串口设备,特别是针对AT91 ARM9 SOC。通过配置kernel configure启用USB Gadget Support,选择相应的串口驱动,并在连接到PC后,PC能够识别为Gadget serial device。在平台端和PC端,可以通过串口进行数据交互。确保设置正确的波特率和主次设备号,并提供了在Windows上安装开源ACM驱动的方法。

4851


被折叠的 条评论
为什么被折叠?



