USB驱动程序之USB设备驱动程序1简单编写
1、驱动编写分析
(1)usb总线驱动程序在我们接入USB设备的时候会帮我们构造一个新的usb_device.注册到总线里面来。左边这一块已经帮我们做好了,我们要做的是右边这一块。我们要构造一个usb_driver结构体,然后注册进去。usb_driver结构体里面的id_table表示能够支持哪一些设备,里面的probe函数表示能够支持接入设备时会被调用。
(2)目的
USB鼠标用作键盘。左键按下时相当于字母L,右键按下时相当于字母S,鼠标中间的滑轮相当于回车。
(3)输入子系统
在probe函数里面做以下几件事情
- 分配input_dev结构体
- 设置它能产生按键类事件
- 注册
- 硬件相关的操作(对于usb鼠标来说,使用usb总线驱动程序提供的读写函数来收发数据)
(4)usb驱动程序编写
- 分配/设置usb_driver结构体
- .id_table
.probe
.disconnect - 注册
2、参考usbmouse.c驱动
(1)usb_driver结构体
(2)id_table
打开宏(match_flag是表示匹配(设备描述符)的哪一项)int是interface的简写,匹配接口的信息(接口描述符),只要接口描述符里面的接口的类是cl,子类是sc,协议是pr,就能够支持。只要USB设备的接口描述符里面的类是HID类,子类是BOOT,协议是MOUSE,就能够支持。
当然,我们还可以通过厂家ID和设备ID,来支持某一款设备,详见(4)
(3)接口描述符(代表逻辑设备)
(4)(id_table)想支持某一款设备,厂家ID和设备ID
下面可以自己设置厂家ID和设备ID
###################################################
##################################################3
(5)probe函数
参数usb_interface结构体,一个usb硬件设备有多个逻辑上的设备,逻辑上的设备使用usb_interface结构体表示的,
参考http://blog.csdn.net/qingkongyeyue/article/details/53363298
编译驱动程序
拷贝别的文件的Makefile,然后修改
用make命令进行编译
把生成的驱动程序拷贝到网络文件系统
使用新内核启动开发板(reboot命令重启)
挂接网络文件系统,安装驱动
接上usb鼠标(found usbmouse是在probe函数设置的)
想插入USB时把厂家ID和设备ID打印出来,因为厂家ID和设备ID都是在设备描述符里面的,当我们接入usb设备后,usb总线驱动程序把相关的描述符都读出来啦!我们只要用就可以啦!
在usb_device结构体里面有设备描述符,设备描述符里面就有厂家ID和设备ID、版本号。
卸载原来的驱动装载新驱动
编写驱动usbmouse_as_key.c(参考usbmouse.c)
转自:http://blog.csdn.net/qingkongyeyue/article/details/53384487
USB驱动程序之USB设备驱动程序1简单编写的更多相关文章
- Linux设备驱动程序学习----1.设备驱动程序简介
设备驱动程序简介 更多内容请参考Linux设备驱动程序学习----目录 1. 简介 Linux系统的优点是,系统内部实现细节对所有人都是公开的.Linux内核由大量复杂的代码组成,设备驱动程序可以 ...
- 如何编写Linux设备驱动程序
一.Linux device driver 的概念 系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口.设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看 ...
- IIC设备驱动程序
IIC设备是一种通过IIC总线连接的设备,由于其简单性,被广泛引用于电子系统中.在现代电子系统中,有很多的IIC设备需要进行相互之间通信 IIC总线是由PHILIPS公司开发的两线式串行总线,用于连接 ...
- 【DSP开发】【Linux开发】IIC设备驱动程序
IIC设备是一种通过IIC总线连接的设备,由于其简单性,被广泛引用于电子系统中.在现代电子系统中,有很多的IIC设备需要进行相互之间通信 IIC总线是由PHILIPS公司开发的两线式串行总线,用于连接 ...
- linux设备驱动程序-i2c(0)-i2c设备驱动源码实现
(基于4.14内核版本) 为了梳理清楚linux内核中的i2c实现框架,从本文开始,博主将分几个章节分别解析i2c总线在linux内核中的形成过程.匹配过程.以及设备驱动程序源码实现. 在介绍linu ...
- Linux设备驱动程序学习----目录
目录 设备驱动程序简介 1.设备驱动程序简介 构造和运行模块 2.内核模块和应用程序的对比 3.模块编译和装载 4.模块的内核符号表 5.模块初始化和关闭 6.模块参数 7.用户空间编写驱动程序 ...
- USB系列之六:基于DOSUSB的简单U盘驱动程序
首先要说明的是,该驱动程序仅实现了部分块设备的功能,如果作为成品软件使用,会感觉性能比较差,而且有些功能(比如FORMAT)是不能完成的,发表此驱动程序的目的旨在说明USB的编程原理以及DOS下驱动程 ...
- USB设备驱动程序1
目的:USB鼠标用作按键,左键相当于字母L,右键相当于字母S,中键相当于Enter.如何来实现?用到输入子系统:1)分配input_dev2)设置3)注册4)硬件相关操作对于USB鼠标来说,硬件操作应 ...
- USB设备驱动程序学习笔记(一)
现象:把USB设备接到PC1. 右下角弹出"发现android phone"2. 跳出一个对话框,提示你安装驱动程序 问1. 既然还没有"驱动程序",为何能知道 ...
- USB设备驱动程序(一)
USB驱动编程原理: 当我们把USB设备插入USB口时会提示需要安装相对应的驱动,如USB鼠标.USB键盘等,这些电脑自己自身已经自带有相对于的驱动程序, 当电脑检查到该USB设备类型相同就去帮你安装 ...
随机推荐
- C++ writestring 为什么不能写进中文 CStdioFile向无法向文本中写入中文【二】
本地化设置需要具备三个条件:a. 语言代码 (Language Code)b. 国家代码 (Country Code) c. 编码(Encoding)本地名字可以用下面这些部分来构造:语言代码_国家代 ...
- Swift中的本地化实现
1. 确保localization中添加了多语言2. 添加localisable.strings文件 3.选择这个文件,勾选多语言即可4.打开localisable.strings文件,添加一些测试字 ...
- [Linux] 终端设置只显示当前目录及终端美化
1.只显示当前目录 vim ~/.bashrc 找到位置: if [ "$color_prompt" = yes ]; then PS1='${debian_chroot:+($d ...
- Android常见问题——找不到HttpClient和okHttp的包
今天再用Android Studio进行网络编程的时候遇到了一个问题,就是怎么也找不到HttpClient的包,上网搜了一下也没什么结果,但最后偶然解决问题,下面总结了一下方法: 首先打开File-& ...
- selenium-java,定位并操作frame和iframe内的元素
因为frame和iframe的原因,在frame里的元素不能直接定位需要切到相应的frame才可以对元素进行操作,下面是涉及的方法 webDriver.switchTo().defaultConten ...
- perspective透视设置
目前只适用于webkit内核 一:当为元素定义 perspective 属性时,其子元素会获得透视效果,而不是元素本身. #div1{position: relative;height: 150px; ...
- BZOJ1304 CQOI2009 叶子的染色 【树形DP】
BZOJ1304 CQOI2009 叶子的染色 Description 给一棵m个结点的无根树,你可以选择一个度数大于1的结点作为根,然后给一些结点(根.内部结点和叶子均可)着以黑色或白色.你的着色方 ...
- BZOJ3083 遥远的国度 【树链剖分】
BZOJ3083 遥远的国度 Description zcwwzdjn在追杀十分sb的zhx,而zhx逃入了一个遥远的国度.当zcwwzdjn准备进入遥远的国度继续追杀时,守护神RapiD阻拦了zcw ...
- Java 层级的简单理解
在J2EE项目中,开发的都是分层来做的: 1.service层:用于暴露给网络调用 2.Impl层:统一规范接口 3.bean层:实体对象,也就是表 4.DAO(Data Access Object) ...
- WPF 和 UWP 中,不用设置 From 或 To,Storyboard 即拥有更灵活的动画控制
无论是 WPF 还是 UWP 开发,如果用 Storyboard 和 Animation 做动画,我们多数时候都会设置 From 和 To 属性,用于从起始值动画到目标值.然而动画并不总是可以静态地指 ...