linux usb设备驱动程序初探

想做USB设备驱动,必需的几点知识是:
  1. USB2.0协议规格,这个可以到www.usb.org网站下载,如果要做HID(人机接口设备)的话,还要看下hid的协议,也在该网站上。
  2. USB设备的工作方式,就是设备都会向主机提供那些信息
  3. linux如何发现USB设备,如何根据设备提供的信息搜索合适的驱动程序。
  4. linux驱动程序的开发方法,以及如何将驱动程序注册到linux系统中
1和2需要自己先学习,这个内容比较多,也比较复杂。
3 呢,linux是通过Vendor ID和ProductID找到一个设备的驱动程序的。当一个usb设备插到系统上后,系统会自动向设备索取设备描述信息,这个信息里面有设备的类型,最大 数据包,还有上面提到的venderID和ProductID。收到设备描述信息后,linux系统会根据ID信息在已经注册的驱动程序中搜索,如果发现 匹配的驱动程序,就调用驱动程序的Probe函数。没有的话,就变成无法识别的设备。

为了有个感性的认识,举了USB驱动开发的例子。
系统情况: 内核版本是2.6.22
ubuntu系统。
USB设备是一个VendorID和ProductID分别为0x4500,0xdf10的USB键盘。

操作步骤:
到系统的/usr/src/linux-xxx的源代码目录下,打开driver/usb目录,里面有个usb-skeleton.c文件,这个是linux系统提供的usb设备驱动模板。
把这个文件拷贝到一个目录下,假设为/test_user。

打开这个模板文件,
找到
#define USB_SKEL_VENDOR_ID
#define USB_SKEL_PRODUCT_ID
两行,修改为
#define USB_SKEL_VENDOR_ID 0x4500
#define USB_SKEL_PRODUCT_ID 0xdf10

修改后,这个模板驱动程序实际上就可以被注册到linux中,并被调用。

首先编译这个驱动,
在模板文件所在目录,建立一个Makefile
内容为
obj-m := usb-skeleton.o
注意的是.o文件的名字和驱动源程序文件名字一定要一样。
然后用Make -C /usr/src/linux-headers-xxx/ M=`pwd` modules命令编译

结束后,会输出一个usb-skeleton.ko文件。

使用insmod usb-skeleton.ko将驱动加载到linux系统中。
加载后,将usb设备插到usb接口,这时候
dmesg |tail命令,就可以看到usb驱动输出的一些信息了。

下图是一个USB设备描述信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值