- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux设备驱动程序简介
Linux设备驱动程序简介
Linux Kernel 系统架构图
一、驱动程序的特点
是应用和硬件设备之间的一个软件层 。
这个软件层一般在内核中实现
设备驱动程序的作用在于提供机制,而不是提供策略,编写访问硬件的内核代码时不要给用户强加任何策略
机制:驱动程序能实现什么功能。
策略:用户如何使用这些功能。
二、设备驱动分类和内核模块
设备驱动类型。Linux 系统将设备驱动分成三种类型
字符设备
块设备
网络设备
内核模块:内核模块是内核提供的一种可以动态加载功能单元来扩展内核功能的机制,类似于软件中的插件机制。这种功能单元叫内核模块。
通常为每个驱动创建一个不同的模块,而不在一个模块中实现多个设备驱动,从而实现良好的伸缩性和扩展性。
三、字符设备
字符设备是个能够象字节流(比如文件)一样访问的设备,由字符设备驱动程序来实现这种特性。通过/dev下的字符设备文件来访问。字符设备驱动程序通常至少需要实现 open、close、read 和 write 等系统调用所对应的对该硬件进行操作的功能函数。
应用程序调用system call(系统调用),例如:read、write,将会导致操作系统执行上层功能组件的代码,这些代码会处理内核的一些内部事务,为操作硬件做好准备,然后就会调用驱动程序中实现的对硬件进行物理操作的函数,从而完成对硬件的驱动,然后返回操作系统上层功能组件的代码,做好内核内部的善后事务,最后返回应用程序。
由于应用程序必须使用/dev目录下的设备文件(参见open调用的第1个参数),所以该设备文件必须事先创建。谁创建设备文件呢?
大多数字符设备是个只能顺序访问的数据通道,不能前后移动访问指针,这点和文件不同。比如串口驱动,只能顺序的读写设备。然而,也存在和数据区或者文件特性类似的字符设备,访问它们时可前后移动访问指针。例如framebuffer设备就是这样一个设备,应用程序可以用 mmap 或 lseek 访问图象的各个区域。
四、块设备
块设备通常是按照块为单位来访问数据,比如一块为512字节。
块设备也是通过 /dev 目录下的文件系统节点来访问。块设备和字符设备的区别仅仅在于内核内部管理数据的方式,也就是内核和驱动程序的接口不同。
块设备除了给内核提供和字符设备一样的接口外,还提供了专门面向块设备的接口,块设备的接口必须支持挂装文件系统,通过此接口,块设备能够容纳文件系统,因此应用程序一般通过文件系统来访问块设备上的内容。
文件系统可能是除驱动程序外 Linux 系统中最重要的模块类型,与块设备驱动程序联系紧密。
五、网络设备驱动和网络接口
网络设备驱动不同于字符设备和块设备,不在/dev下以文件节点为代表,而是通过单独的网络接口(eth0、eth1)来代表。
任何网络事务都要经过一个网络接口,即一个能够和其它主机交换数据的设备。通常接口代表一个硬件设备(如网卡),但也可能是个纯软件设备。
内核和网络驱动程序间的通讯完全不同于内核和字符设备以及块设备驱动程序之间的通信,内核调用一套和数据包传输相关的函数。
六、设备文件和设备驱动
设备文件是文件系统上的一个节点,是一种特殊的文件,叫做设备文件。每个设备文件在用户空间代表了一个设备。
设备文件一般存在/dev目录下,用mknod命令创建。 设备文件有主、次设备号与其关联。
设备文件是用户应用程序和设备驱动的接口。应用程序一般只能通过设备文件来使用设备驱动的功能。
字符和块设备驱动必须有相应的设备文件来对应。
很明显,操作系统内部不可能用设备文件名来与物理设备及其驱动进行绑定。其实,操作系统内部是用设备号来与物理设备及其驱动进行绑定的。习惯上,用主设备号与驱动进行关联,用次设备号与具有相同驱动的不同物理设备关联(例如:2个硬盘)。
dennis@dennis-desktop:~$ ls -l /dev/sd[a-c]brw-rw---- 1 root disk 8,? 0 2010-04-13 13:38 /dev/sdabrw-rw---- 1 root disk 8, 16 2010-04-13 13:38 /dev/sdbbrw-rw---- 1 root disk 8, 32 2010-04-13 13:38 /dev/sdc
当用户程序运行open(/dev/ttyS0,…)时,由于设备文件/dev/ttyS0有一个设备号与其关联,因此操作系统可以获知应用程序想操控的设备的设备号,而操作系统内部又将设备号与物理设备及其驱动进行了绑定,因此操作系统就可以知道应该调用哪一个驱动去控制哪一个设备。当然这一切的前提是,操作系统内部要将设备号与物理设备及其驱动进行绑定,那么操作系统内部是用什么
您可能关注的文档
最近下载
- 党的二十届三中全会要点解读PPT党政风三中全会精神学习党课模板.pptx VIP
- 2024新人教版初中物理实验一览表.pdf
- 线路精确改道作业指导书.ppt VIP
- lesson8正在……除了…以外-英语学习.ppt VIP
- 2025广东惠州市市直机关事业单位集中招聘编外人员34人笔试模拟试题及答案解析.docx VIP
- 2型糖尿病患者的护理查房.pptx VIP
- 全国计算机等级考试二级教程MSOffice高级应用全套完整教学课件.pptx
- 含γ-氨基丁酸以及天然小分子化合物的组合物及其在制备具有抗衰老作用的产品中的应用.pdf VIP
- 妇科手术详解.doc VIP
- 民宿突发事件应急预案.docx VIP
文档评论(0)