USB驱动编程指南设计.doc

USB驱动编程指南设计.doc

ID:57409520

大小:41.00 KB

页数:9页

时间:2020-08-16

USB驱动编程指南设计.doc_第1页
USB驱动编程指南设计.doc_第2页
USB驱动编程指南设计.doc_第3页
USB驱动编程指南设计.doc_第4页
USB驱动编程指南设计.doc_第5页
资源描述:

《USB驱动编程指南设计.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、USB驱动编写指南1概念:模块和设备文件1.1模块模块是在核空间运行的程序,实际上是一种目标对象文件,没有,不能独立运行,但是可以装载到系统中作为核的一部分运行,从而可以动态扩充核的功能。模块最主要的用处就是用来实现设备驱动程序。Linux下对于一个硬件的驱动,可以有两种方式:直接加载到核代码中,启动核时就会驱动此硬件设备。另一种就是以模块方式,编译生成一个.ko文件(在2.4以下核中是用.o作模块文件,我们以2.6的核为准,以下同)。当应用程序需要时再加载到核空间运行。所以我们所说的一个硬件的驱动程序,通常指的就是一个驱动模块。1.2设备

2、文件设备文件对于一个设备,它可以在/dev下面存在一个对应的逻辑设备节点,这个节点以文件的形式存在,但它不是普通意义上的文件,它是设备文件,更确切的说,它是设备节点。这个节点是通过mknod命令建立的,其中指定了主设备号和次设备号。主设备号表明了某一类设备,一般对应着确定的驱动程序;次设备号一般是区分不同属性,例如不同的使用方法,不同的位置,不同的操作。这个设备号是从/proc/devices文件中获得的,所以一般是先有驱动程序在核中,才有设备节点在目录中。这个设备号(特指主设备号)的主要作用,就是声明设备所使用的驱动程序。驱动程序和设备号

3、是一一对应的,当你打开一个设备文件时,操作系统就已经知道这个设备所对应的驱动程序。对于一个硬件,Linux是这样来进行驱动的:首先,我们必须提供一个.ko的驱动模块文件。我们要使用这个驱动程序,首先要加载它,我们可以用insmodxxx.ko,这样驱动就会根据自己的类型(字符设备类型或块设备类型,例如鼠标就是字符设备而硬盘就是块设备)向系统注册,注册成功系统会反馈一个主设备号,这个主设备号就是系统对它的唯一标识。驱动就是根据此主设备号来创建一个一般放置在/dev目录下的设备文件。在我们要访问此硬件时,就可以对设备文件通过open、read、

4、write、close等命令进行。而驱动就会接收到相应的read、write操作而根据自己的模块中的相应函数进行操作了。2USB驱动程序如何应用了解了上述理论后,我们就可以动手写驱动程序,如果你基本功好,而且写过linux下的硬件驱动,USB的硬件驱动和pci_driver很类似,那么写USB的驱动就比较简单了,如果你只是大体了解了linux的硬件驱动,那也不要紧,因为在linux的核源码中有一个框架程序可以拿来借用一下,这个框架程序在/usr/src/~(你的核版本,以下同)/drivers/usb下,文件名为usb-skeleton.c

5、。写一个USB的驱动程序最基本的要做四件事:驱动程序要支持的设备、注册USB驱动程序、探测和断开、提交和控制urb(USB请求块)(当然也可以不用urb来传输数据,下文我们会说到)。2.1驱动程序支持的设备驱动程序支持的设备有一个结构体structusb_device_id,这个结构体提供了一列不同类型的该驱动程序支持的USB设备,对于一个只控制一个特定的USB设备的驱动程序来说,structusb_device_id表被定义为:/*驱动程序支持的设备列表*/staticstructusb_device_idskel_table={{USB

6、_DEVICE(USB_SKEL_VENDOR_ID,USB_SKEL_PRODUCT_ID)},{}/*终止入口*/};MODULE_DEVICE_TABLE(usb,skel_table);对于PC驱动程序,MODULE_DEVICE_TABLE是必需的,而且usb必需为该宏的第一个值,而USB_SKEL_VENDOR_ID和USB_SKEL_PRODUCT_ID就是这个特殊设备的制造商和产品的ID了,我们在程序中把定义的值改为我们这款USB的,如:/*定义制造商和产品的ID号*/#defineUSB_SKEL_VENDOR_ID0x1

7、234#defineUSB_SKEL_PRODUCT_ID0x2345这两个值可以通过命令lsusb,当然你得先把USB设备先插到主机上了。或者查看厂商的USB设备的手册也能得到,在我机器上运行lsusb是这样的结果:Bus004Device001:ID0000:0000Bus003Device002:ID1234:2345AbcCorp.Bus002Device001:ID0000:0000Bus001Device001:ID0000:0000得到这两个值后把它定义到程序里就可以了。2.2注册USB驱动程序注册USB驱动程序所有的USB驱

8、动程序都必须创建的结构体是structusb_driver。这个结构体必须由USB驱动程序来填写,包括许多回调函数和变量,它们向USB核心代码描述USB驱动程序。创建一个有效的s

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。