USB驱动程序设计之二(Linux USB架构及相关的USB协议)
Linux USB架构
Mass Storage
开发板作为Host 主机时,在开发板中插入U盘进行试验。
一、Mass storage 介绍
mass storage 是USB协议中的一部分, 是大容量存储器或者海量存储器的意思。我们的U盘就是利用的这个协议开发和制作的。
遵从这个协议,可以让我们的USB从设备连接到USB Host设备上,并能够执行文件的传输(存储和读写等)。一般的操作系统都集成了这个协议的驱动,所以我们的U盘等存储设备插入到PC上时,才不用安装驱动。
二、配置支持mass storage的linux内核
在linux内核目录中执行:
make menuconfig ARCH=arm
进入General Setup—>[*]configure standard kernel features
配置如下:
-
配置支持热插拔
-
配置SCSI
进行如下配置: -
配置USB支持
配置如下: -
配置文件系统
(1)DOS配置如下
(2)Partition Type(分区表)配置如下:
(3)Native Language(语言支持)配置如下
进行内核配置完成后,重新编译内核
make uImage ARCH=arm CROSS_COMPILE=arm-linux-
会在目录 arch/arm/boot/ 下生成uImage文件,之后把文件拷贝到tftpboot(tftp服务器共享目录)目录下,在uboot下执行
tftp c0008000 uImage
bootm c0008000
进行内核下载和运行。插入u盘进行挂载和查看盘内容试验。
aaa@qq.com#: mount /dev/... /mnt/
aaa@qq.com#: cd /mnt
aaa@qq.com#:ls
USB HID(Human Interface Device)
一、USB HID介绍
USB HID:是Human Interface Device的缩写,由其名称可以了解HID设备是直接与人交互的设备,例如键盘、鼠标与游戏杆等。不过HID设备并不一定要有人机接口,只要符合HID类别规范的设备都是HID设备。
二、配置linux内核支持USB HID
在linux内核目录中执行:
make menuconfig ARCH=arm
进行如下配置
进行内核配置完成后,重新编译内核
make uImage ARCH=arm CROSS_COMPILE=arm-linux-
会在目录 arch/arm/boot/ 下生成uImage文件,之后把文件拷贝到tftpboot(tftp服务器共享目录)目录下,在uboot下执行
tftp c0008000 uImage
bootm c0008000
进行内核下载和运行。插入鼠标会在 /dev/ 目录下有 mouse0 设备
RNDIS
一、RNDIS介绍
.Remote Network Driver Interface Specification,既是RemoteNDIS,既是远程网络驱动接口规范。基于USB实现RNDIS实际上就是TCP/IP over USB,就是在USB设备上跑TCP/IP,让USB设备看上去像一块网卡。
二、配置linux内核支持RNDIS
(开发板作为运行linux的设备)
可以把开发作为一块网卡开始用
具体内核配置如下:
在linux内核目录中执行:
make menuconfig ARCH=arm
进行如下配置
配置完成后就可以编译内核和内核模块:
make uImage ARCH=arm CROSS_COMPILE=arm-linux-
make modules ARCH=arm CROSS_COMPILE=arm-linux-
拷贝uImage到 /home/xxx/tftpboot下
cp arch/arm/boot/uImage /home/xxx/tftpboot/
拷贝g_ether.ko到根文件系统目录下
cp drivers/usb/gadget/g_ether.ko /home/xxx/miniTest/rootfs/
之后在uboot下执行 来下载uImage和运行内核
tftp c0008000 uImage
bootm c0008000
插入miniUSB线xia 到 PC 机,为USB安装通过相应的驱动(此时,会发现mini6410开发板USB设备是作为一块网卡来进行使用),在linux下也会发现多了一块网卡,执行
ifconfig usb0 192.168.10.222
进行IP地址上配置,再在PC机上进行网卡IP配置(同一网段),然后就可以通过 ping 命令来进行PC 和 mini6410开发板通信了。
USB CDC/ACM
介绍
USB的CDC类是USB通信设备类 (Communication Device Class)的简称。CDC类是USB组织定义的一类专门给各种通信设备(电信通信设备和中速网络通信设备)使用的USB子类。
ACM(Abstract Control Model)
CDC/ACM其实是一种协议,通过这种协议,把USB模拟成一个串口。
配置linux内核支持CDC ACM
在linux内核目录下执行
make menuconfig ARCH=arm
再选中USB Gadget Support
之后重新编译内核和内核模块
make uImage ARCH=arm CROSS_COMPILE=arm-linux-
make modules ARCH=arm CROSS_COMPILE=arm-linux-
之后拷贝内核和内核模块到 开发板的根目录下:
内核在 arch/arm/boot/ 目录下,内核模块为 drivers/usb/gadget/g_serial.ko
最后在开发板中安装内核模块
insmod g_serial.ko
会在 /dev/ 下多出来一个设备文件 ttyGS0
通过 ls -l /dev/ttyGS0 命令查看,如下图
最后把开发板的 miniUSB 口的线与PC机进行连接,在SecureCRT 中打开一个串口终端进行测试,测试步骤如下 gif 所示
上一篇: USB摄像头驱动程序分析
下一篇: Matplotlib 绘图库从入门到精通