当前位置:嗨网首页>书籍在线阅读

19-总结

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

20.6 总结

USB驱动分为USB主机驱动和USB设备驱动,如果系统的USB主机控制器符合OHCI等标准,这主机驱动的绝大部分工作都可以沿用通用的代码。

对于一个USB设备而言,它至少具备两重身份:首先它是“USB”的,其次它是“自己”的。USB设备是“USB”的,指它挂接在USB总线上,其必须完成usb_driver的初始化和注册;USB设备是“自己”的,意味着本身可能是一个字符设备、tty设备、网络设备等,因此,USB设备驱动中也必须实现符合相应框架的代码。

USB设备驱动的自身设备驱动部分的读写等操作流程有其特殊性,即以URB来贯穿始终,一个URB的生命周期通常包含创建、初始化、提交,和被USB核心及USB主机传递及完成后回调函数被调用的过程,当然,在URB被驱动提交后,也可以被取消。

在UDC和gadget侧,UDC关心底层的硬件操作,而gadget驱动则只是利用通用的API,透过usb_request与底层UDC驱动交互。

PCI总线在一般的小型手持设备中不太可能用到,但是在工控和通信设备及其PC中却引领着潮流。在Linux系统中,PCI设备驱动和USB设备驱动有共性,那就是其驱动都由总线相关部分和自身设备类型驱动两部分组成。

21.1节讲解了PCI总线及其配置空间,给出了PCI总线在Linux内核中的数据结构。

PCI设备驱动的PCI相关部分围绕着pci_driver结构体的成员函数展开,21.2节讲解了pci_driver结构体及其成员函数的含义,并分析了PCI设备驱动的框架结构。