USB设备驱动模型
嵌入式设备驱动的编写,基本上都要按照一定的驱动模型编写。不这么做的话,一旦设备发生了更新和改变,大部分的驱动代码都要推倒重来,代码的重用率低,不具备移植性。所以在新版linux2.6.22以后的内核版本中设计总线设备驱动模型,其实就是将单一的驱动拆成三部分:总线设备驱动、核心层驱动(纯软件)、设备层驱动。
这样总线驱动和核心层驱动为重复性工作,不需改动。所以工作量主要体现在设备层驱动上。
内核中有不同的总线类型,不同的总线有不同的匹配方式。platform_bus_type总线使用名字来匹配,而usb_bus_type使用id_table来匹配,但是各种总线的匹配流程大致是一样的。将设备和驱动通过总线连接起来需要用到match函数。
USB总线驱动程序的作用
1. 识别USB设备
1.1 分配地址
1.2 并告诉USB设备(set address)
1.3 发出命令获取描述符
2. 查找并安装对应的设备驱动程序
3. 提供USB读写函数
USB设备在插入嵌入式设备时会给CPU一个中断信号,驱使总线驱动控制的USB控制器来与USB设备发送握手信息,match函数将id_table与USB设备的设备信息一一核对。成功匹配后调用probe函数。
而probe函数主要实现的就是input输入子系统。这个输入子系统已经将各类输入事件,比如鼠标、键盘、手柄等常用的输入设备信号封装好了。输入子系统的框架如下:
1.分配 input_dev结构体
2.设置input_dev结构体
3.注册input_dev结构体
4.硬件相关的操作
怎么写USB设备驱动程序?
1. 分配/设置usb_driver结构体
.id_table
.probe (最重要的函数)
.disconnect
2. 注册(usb_register)
最新文章
- YACC和BISON学习心得
- volcanol_Linux_ 问题汇总系列_4_Thinkpad_E40_0578MDC_在Fedora 13 Linux(FC13)中如何安装无线网卡驱动
- 理解CSS3 transform中的Matrix(矩阵)
- LINUX下软件包的安装与使用
- VS2013远程调试功能
- Android无法调用JS的问题解决
- html-----001
- Delphi自定义消息应用及delphi托盘实现
- poi读写Excel文件
- TCP在三次握手协议和四波(图)
- Python第一天——入门Python(1)数据定义
- hdu_5711_Ingress(TSP+贪心)
- Django_验证码
- angular-单页面应用程序
- oracle中的exists 和 in 用法详解
- POJ 2531-Network Saboteur(dfs)
- Dell Venue 8 Pro启动盘UEFI模式32位启动,备份系统
- 在WPF中的Canvas上实现控件的拖动、缩放
- js中setInterval和setTimeout区别和用法
- SPOJ.Visible Lattice Points(莫比乌斯反演)
热门文章
- Go gRPC进阶-超时设置(六)
- Js异步机制的实现
- Python操作rabbitmq系列(五):根据主题分配消息
- 亲测可以使用的Axmath和MathPix插入word公式
- Serval and Parenthesis Sequence CodeForces - 1153C
- Rescue BFS+优先队列 杭电1242
- 关于C++线程池的实现的思考
- windows下常用快捷指令记忆
- golang实现并发爬虫三(用队列调度器实现)
- python执行提示“ImportError: No module named OpenSSL.crypto”