网站大量收购闲置独家精品文档,联系QQ:2885784924

1.Linux设备驱动程序简介分析.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
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/sda brw-rw---- 1 root disk 8, 16 2010-04-13 13:38 /dev/sdb brw-rw---- 1 root disk 8, 32 2010-04-13 13:38 /dev/sdc 当用户程序运行open(/dev/ttyS0,…)时,由于设备文件/dev/ttyS0有一个设备号与其关联,因此操作系统可以获知应用程序想操控的设备的设备号,而操作系统内部又将设备号与物理设备及其驱动进行了绑定,因此操作系统就可以知道应该调用哪一个驱动去控制哪一个设备。当然这一切的前提是,操作系统内部要将设备号与物理设备及其驱动进行绑定,那么操作系统内部是用什么手段完

文档评论(0)

xuefei111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档