详解嵌入式Linux的USB驱动设计
架 1.3.1 基本数据结构 usb-skel设备使用自定义结构usb_skel记录设备驱动用到的所有描述符,该结构定义如下: 1.3.2 驱动程序初始化和注销 同其他所有的Linux设备驱动程序一样,usb-skel驱动使用module_init()宏初始化函数,使用module_exit()宏注销函数。usb-skel驱动的初始化函数usb_skel_init()函数,定义如下: sb_skel_init()函数调用内核提供的usb_register()函数注册了一个usb_driver类型的结构变量,该变量定义如下: 其中usb_skel设备的USB ID映射表定义如下: 在USB驱动中调用usb_deregister()函数注销usb-skel设备驱动,函数定义如下: 1.3.3 初始化设备 从skel_driver结构可以知道usb-skel设备的初始化函数是skel_probe()函数,设备初始化主要是探测设备类型,分配USB设备用到的urb资源,注册USB设备操作函数等。 skel_class结构变量记录了usb-skel设备信息,定义如下: name变量使用%d通配符表示一个整型变量,当一个usb-skel类型的设备连接到USB总先后会2按照子设备编号自动设置设备名称。Fops设备操作函数结构变量,定义如下: 1.3.4 设备注销 skel_disconnect()函数在注销设备时被调用,定义如下: 2 USB串口驱动 2. 1 驱动初始化函数 usb_serial_init()函数是一个典型的USB设备驱动初始化函数,定义如下: 函数首先调用alloc_tty_driver()函数分配一个串口驱动描述符;然后设置串口驱动的属性,包括驱动的主从设备号、设备类型、串口初始化参数等;串口驱动描述符设置完毕后,调用usb_register()函数注册USB串口设备。 2. 2 驱动释放函数 2.3 串口操作函数 USB串口设备驱动使用了一个tty_operations类型的结构,该结构包含了串口的所有操作,定义如下: 按上述的步骤和方法通过lnsmod命令成功实现了USB驱动程序的加载,成功的通过USB串口进行了数据的读写。 3 结论 新出的Linux2.6内核加入了对USB2.0的支持,重新定义了usb_class_driver结构体。同时对探测函数probe和usb_submit_urb做了修改,包含了advanced linux sound Archiecture可以更安全的使用USB设备。
- USB驱动程序框架搭建(12-15)
- VxWorks实时操作系统的USB驱动程序原理与分析(03-27)
- REDIce-Linux--灵活的实时Linux内核(11-12)
- linux文件系统基础(02-09)
- Linux标准趋向统一(11-12)
- linux基础技术(02-09)