http://blog.csdn.net/flyfish30/article/details/1444829
今天上网,查找USB驱动相关的问题时找到一个好网站(www.linux-usb.org),若要做linux下的USB 驱动,到这个网站可以找到很多好东西。今天匆匆看了一下,了解了linux的USB从设备(器件)驱动的一些知识,记录如下。
一. USB盘的实现
linux下U盘的实现其实很简单,基于一个g_file_storage的模块,使用文件或其他块设备(如MTD设备)作为U盘的存储器即可,不用自己编写驱动程序。以文件为例的具体步骤如下所示:
· 创建文件存储器
[root@localhost data]# dd bs=1M count=64 if=/dev/zero of=/root/data/backing_file
· 用fdisk对该文件存储器分区,可以不做,但有的版本的windows会不认这个U盘
[root@localhost data]# fdisk file=/root/data/backing_file
· 格式化该文件存储器上的分区,若未使用fdisk,则如下操作
[root@localhost data]# mkdosfs /root/data/backing_file
· 加载文件存储器,实现U盘
[root@localhost data]# modprobe g_file_storage file=/root/data/backing_file
简单的几步操作完成后,将你的目标板通过USB线作为从设备连接到PC上,在PC端即可见到这个U盘。使用fdisk对文件存储器分区后的格式化步骤参考文章www.linux-usb.org/gadget/file_storage.html。
二. USB网卡的实现
linux下的从设备网卡的实现是基于g_ether的模块,加载该模块即可作为一个ethernet网络设备连接到PC主机。
三. USB串口的实现
linux下的从设备USB串口模块实现了从设备端的USB转串口,g_serial使得运行嵌入式linux的小机作为一个串口设备通过USB连接到PC主机,PC主机可以使用MINICOM等登录到linux小机上。
由上面这些可以看到,linux对USB从设备(器件)的支持还是比较完善的,使用也比较方便。另外,linux还支持用户空间的对USB器件的直接驱动,如设置USB器件的配置,接口,端点,直接读写USB器件的端点来接收和发送数据,即用户空间的驱动,性能和内核的驱动几乎没什么差别。和当年在windows下编写USB驱动比起来,要好用多了。
有空再看看linux下USB多接口是如何实现的。
参考文档
Linux的USB从设备(器件)驱动API www.linux-usb.org/gadget