linux 设备驱动程序 pdf 什么是设备驱动程序

插入usb鼠标时显示“未能成功安装设备驱动程序”

因为USB鼠标是Class Specific设备,这种USB设备的驱动大部分都是通用的,所以凡是Class Specific设备,都可以用一份驱动搞定,鼠标以插上去就能用,是因为Windows预先内置了这个Class的驱动,当然,不是所有USB设备都是Class Specific的,有很多都不是,比如USB无线网卡、USB转串口,这些设备就需要厂商提供驱动才行。

USB键盘和鼠标都属于HID Class,ClassID是03,SubClassID是01,其中键盘的ProtocolID是01,鼠标的ProtocolID是02.

想知道有哪些USB Class以及技术规范,需要访问以下位置获得文档:

USB.org- USB Device Class Specifications

其中HID Class的:

USB.org- HID Tools

技术规范:

全英文。

如果Windows没有内置USB HID的Class驱动,那么键盘鼠标接上去就不能用,必须另外装驱动才行。

同样的,也可以想办法把Windows里的USB HID驱动卸载,这样键盘鼠标也不能用了,在Linux里也可以做类似的事情。

在嵌入式开发中,需要单独做键盘鼠标驱动是很常见的事情。

你想获得USB的电路图,恐怕有困难。

USB电路中要有十分稳定的晶振等,你自己设计电路很麻烦,一般来说设备端的控制芯片都是批量生产做好的,很少有人单独做,因为自己做电路的话,高频信号很难保证。

一般来说USB键盘、鼠标都是把键位、移动数据放到一个USB中断传输里(跟CPU中断不是一个概念),主机端采用polling的方式获得设备状态。

电路层面上,一般都是一个USB控制芯片搞定,鼠标把状态报给USB设备端的控制芯片,然后剩下的都是控制芯片完成的,各个厂商的控制芯片略有不同,比如罗技的是CP5919AM,一般都是厂商量产的。

如果做开发,那么一般是用OTG做模拟,但这个开发成本极高,需要学习OTG相关的文档:

USB.org- USB On-The-Go

当然了,一切的前提是要熟读USB2.0基础规范:

USB.org- USB 2.0 Documents

怎样编写Linux设备驱动程序

Linux是Unix操作系统的一种变种,在Linux下编写驱动程序的原理和思想完全类似于其他的Unix系统,但它dos或window环境下的驱动程序有很大的区别。在Linux环境下设计驱动程序,思想简洁,操作方便,功能也很强大,但是支持函数少,只能依赖kernel中的函数,有些常用的操作要自己来编写,而且调试也不方便。本人这几周来为实验室自行研制的一块多媒体卡编制了驱动程序,获得了一些经验,愿与Linux fans共享

一、Linux device driver的概念系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作。设备驱动程序是内核的一部分,它完成以下的功能:

1.对设备初始化和释放。

2.把数据从内核传送到硬件和从硬件读取数据。

3.读取应用程序传送给设备文件的数据和回送应用程序请求的数据。

4.检测和处理设备出现的错误。

二、实例剖析我们来写一个最简单的字符设备驱动程序。虽然它什么也不做,但是通过它可以了解Linux的设备驱动程序的工作原理。

armlinux移植FTP客户端armlinux移植

ARMLINUX与普通LINUX区别?

相对于ARMlinux,我们说的普通linux指的是X86linux,他们都是linux系统,但是由于ARM和X86是不同的CPU架构,他们的指令集不同,所以软件编译环境不同,软件代码一般不能互用,一般需要进行兼容性移植。X86是经典的CISC指令集,指令集复杂,功能多,串行执行,但是也意味着执行效率低下,但性价比突出,所以称为民用终端的主流处理器内置指令集。Intel和AMD的家用处理器都是X86指令集。以X86为代表的CISC,理论并发线程1-2条。ARM是AdvancedRISCMachine的缩写。它的指令集比RISC还要精简。通常使用ARM架构处理器的机型,多为嵌入式或者便携机。主频通常不高,现在高通公司的ARM架构处理器有1.0GHz的,已经算相当高了。另外,ARM7沿用冯·诺依曼结构;而从ARM9以后,就都采用了哈佛结构。ARM的并发线程,理论上有4条左右,处理效率较X86高不少。

如何将ubuntu系统移植到ARM平台上?

1.平台独立的rootfs。与硬件平台无关.2.硬件包(hardwarepack)。此部分与具体的硬件相关,针对每款平台发布一个对应的硬件包。借助于其发布的rootfs,再加上平台提供的kernel,boot等,就可以搭建起一个ubuntu系统。

armlinux和linux的区别?

相对于ARMlinux,我们说的普通linux指的是X86linux,他们都是linux系统,但是由于ARM和X86是不同的CPU架构,他们的指令集不同,所以软件编译环境不同,软件代码一般不能互用,一般需要进行兼容性移植。

X86是经典的CISC指令集,指令集复杂,功能多,串行执行,但是也意味着执行效率低下,但性价比突出,所以称为民用终端的主流处理器内置指令集。Intel和AMD的家用处理器都是X86指令集。以X86为代表的CISC,理论并发线程1-2条。ARM是AdvancedRISCMachine的缩写。它的指令集比RISC还要精简。通常使用ARM架构处理器的机型,多为嵌入式或者便携机。主频通常不高,现在高通公司的ARM架构处理器有1.0GHz的,已经算相当高了。另外,ARM7沿用冯·诺依曼结构;而从ARM9以后,就都采用了哈佛结构。ARM的并发线程,理论上有4条左右,处理效率较X86高不少。

如何在ucos下进行arm编程?

1、您得有一定数量的Money。

(1)、开发板贵

(2)、培训费更贵

(3)、开发平台是贵得不能再贵。(除非您只是想玩玩而已)

2、需要学习的东西多。(1)、window环境编程;(2)、Linux环境编程;(3)、单片机

3、最后也是最重要的一点,你得有坚韧不拔之志和一颗平常之心。

(1)、自信坚强积极勤快(注:好的自信是自觉的!)

(2)、成功其实就是成为最好的您自己

嵌入式门槛虽然较高,但也跟其他事物一样,并不是牢不可破。只要我们用心去对待,东雪终将化去,春风定会吹来。具体步骤如下:

1、《C语言》第二版谭浩强;《C程序设计语言》第二版徐宝文译机戒工业出版社

你能区分开指针数组和数组指针吗?你知道函数指针吗?

你能区分开定义一个变量时系统给它分配的空间与用malloc()函数给一个变量分配的空间有什么不一样吗?

2、《数据结构》C语言版黄国愉、叶乃青编清华大学出版社

你能合上书本,用C语言实现书中的单链表、双链表数据结构吗?

3、《实用C++程序设计》第二板中国电力出版社Steve_Oualline著

此阶段主要是学习其面向对象的编程思想,加深对C语言和数据结构的理解。

4、学习单片机,最好能找个前辈带一带。

你能用51单片机做出一样实际的东西吗?即使它再简单!

要注意加深对中断的理解。

5、学习ARM单片机。

(1)、细读《ARM微控制器基础与实战》周立工编写(注:即使你不用书中的开发板)

(2)、细读相关芯片的原版英文文档。如:arm920TE.pdfS3C2410_1.2.pdf

6、学习uCOS!!操作系统。

(1)、细读《嵌入式实时操作系统uC/OS-!!》第二版召贝贝译

你能把uCOS!!移植到自己的平台上吗?

(2)、能编写在uCOS!!操作系统环境下运行的针对具体硬件的驱动程序

7、熟悉Linux环境,学习Linux环境编程,学习交叉编程

(1)、细读《linux命令大全.pdf》

(2)、细读《GNUMake使用手册(中译版).pdf》

(3)、学习创建交叉编程环境.

8、学习Linux操作系统。

(1)、《UNIX环境高级编程》

(2)、细读“joyfire笔记”,可在“qianrushi.com”网站的好书下载栏目获取

(3)、细读《linux内核完全注释》

(4)、细读《understandingthelinuxkernel2》

(5)、利用源代码阅读利器工具”SourceInsight”进行真正的linux内核原码刨析

(6)、最后进行内核移植,并能编写在linux操作系统环境下运行的针对具体硬件的驱动程序

9、学习Linux设备驱动编写。可参考《Linux设备驱动程序》

10、复习C++,学习用QT进行图形界面编程

(1)、细读《QT编程宝典》

(2)、学会通过查看QT电子文档进行QTGUI实地编程

(3)、学习交叉编程.(其实就是把命令qmake变为tmake)

11、当然,你也可学习一下PCB的制作和设计一个自己的CPU(即软壳)

至此,你已学完嵌入式的整流程!但谨记:一个有思想的人才真是一个力量无边的人;有容乃大,能予方强!

LinuxSTM32ARM三者到底什么关系呀要先学哪个?

linux是操作系统可以移植到arm上去stm32是意法半导体的单片机有armcortexm3、m4架构的单片机建议先学32其实可以同时学的

阅读剩余
THE END