CDC: 配置USB为Gadget serial device
2015-11-17 10:59
483 查看
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
cp obj/mtxxxx_smp_mod_dbg_defconfig/.config arch/arm/configs/ mtxxxx_smp_mod_dbg_defconfig
配置configure时需要选择
Device Drivers --->
USB support --->
USB Gadget Support --->
USB Gadget Drivers (Serial Gadget (With CDC ACMand CDC OBEX support)) --->
最终configure文件中需要包含以下几条:
CONFIG_USB_MTK_MUSB=y
CONFIG_USB_MTK_MUSB_PERIPHERAL=y
CONFIG_USB_GADGET=y
CONFIG_USB_LIBCOMPOSITE=y
CONFIG_USB_F_ACM=y
CONFIG_USB_U_SERIAL=y
CONFIG_USB_F_SERIAL=y
CONFIG_USB_G_SERIAL=y
CONIFG_CONFIGS_FS=y
USB配置好device mode之后, 通过usb calbe接入PC, PC会检测到Gadget serial device. 相应的driver可以从Linux open source获取.
可以通过在平台端cat /dev/ttyGS0 ,同时在PC端串口中写入数据,平台端即可看到正确的数据输出。
( 请确认driver中boundrate / 主次设备号设定,主次设备号可在u_serial.c的gserial_setup() function中指定 gs_tty_driver->major = 0x000 c_ispeed = 9600等; )
To use the Windows ACMdriver you must have the "linux-cdc-acm.inf" file (driver is opensource, get it from the link ) which supports
all recent versions of Windows.
http://lxr.free-electrons.com/source/Documentation/usb/
正确安装driver之后, 通过设备管理器可以在Ports (COM & LPT) 目录下看到一个新的COM口.
对于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
cp obj/mtxxxx_smp_mod_dbg_defconfig/.config arch/arm/configs/ mtxxxx_smp_mod_dbg_defconfig
配置configure时需要选择
Device Drivers --->
USB support --->
USB Gadget Support --->
USB Gadget Drivers (Serial Gadget (With CDC ACMand CDC OBEX support)) --->
最终configure文件中需要包含以下几条:
CONFIG_USB_MTK_MUSB=y
CONFIG_USB_MTK_MUSB_PERIPHERAL=y
CONFIG_USB_GADGET=y
CONFIG_USB_LIBCOMPOSITE=y
CONFIG_USB_F_ACM=y
CONFIG_USB_U_SERIAL=y
CONFIG_USB_F_SERIAL=y
CONFIG_USB_G_SERIAL=y
CONIFG_CONFIGS_FS=y
USB配置好device mode之后, 通过usb calbe接入PC, PC会检测到Gadget serial device. 相应的driver可以从Linux open source获取.
可以通过在平台端cat /dev/ttyGS0 ,同时在PC端串口中写入数据,平台端即可看到正确的数据输出。
( 请确认driver中boundrate / 主次设备号设定,主次设备号可在u_serial.c的gserial_setup() function中指定 gs_tty_driver->major = 0x000 c_ispeed = 9600等; )
To use the Windows ACMdriver you must have the "linux-cdc-acm.inf" file (driver is opensource, get it from the link ) which supports
all recent versions of Windows.
http://lxr.free-electrons.com/source/Documentation/usb/
正确安装driver之后, 通过设备管理器可以在Ports (COM & LPT) 目录下看到一个新的COM口.
相关文章推荐
- 【hihocoder1249 2015北京赛区A】【打标记线性扫描法】 Xiongnu's Land 土地划分使得左边比右边大且尽可能接近
- java线程同步的几种方式
- ubuntu14.04,安装、配置GO语言开发工具Eclipse!!
- Linux配置启动挂载:fstab文件详解
- 《代码大全2》读书笔记
- 【Android解决方案】在onResume里调用getIntent()得到的是上一次数据
- ubuntu14.04,安装、配置GO语言开发工具Eclipse!!
- .net导入Oracle数据优化小记
- android 显示图文混排
- 深入理解jvm内存
- Masonry 和 UITableView-FDTemplateLayoutCell 实现自适应高度的Cell
- 基于Jquery和html5的7款个性化地图插件
- min-width
- Apache和Nginx运行原理解析
- Alpha版本项目展示
- 不同平台字节对齐
- ERROR: NMO not setuid-root (Unix-only)错误的解决方法
- [LintCode] Insertion Sort List
- 查找g++文档的方法
- 287Find the Duplicate Number