嵌入式Linux系统开发教程 教学课件 作者 978 7 302 22520 1 第十章.pptVIP

嵌入式Linux系统开发教程 教学课件 作者 978 7 302 22520 1 第十章.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口。它们都有一个共同的特点:屏蔽了底层的某个具体服务的实现细节,比如,系统调用屏蔽了操作系统内核某个具体功能的实现细节,设备驱动程序则屏蔽了底层硬件设备的细节。 具体来说,在Linux中设备是被当做文件来进行处理的。上层的应用程序需要操作硬件时,只需要获得设备的文件描述符,然后通过系统调用open(),read(),write(),ioctl(),close()等来操作设备,这与一般普通的文件操作非常类似。应用程序不关心无需关心硬件的细节。应用程序发出系统调用指令后,会从用户态转换为内核态,通过内核将系统调用函数转换成对物理设备的操作。如图所示了应用程序使用底层的设备接口示意图,从中可以看出,设备驱动层起到了承上启下的作用。 常见的驱动程序也是作为内核模块动态加载的,比如声卡驱动和网卡驱动等,而 Linux最基础的驱动,如CPU、PCI总线、TCP/IP协议、APM(高级电源管理)、VFS等驱动程序则直接编译在内核文件中。有时也把内核模块叫做驱动程序,只不过驱动的内容不一定是硬件罢了,比如ext3文件系统的驱动。因此,加载驱动时就是加载内核模块。 作为程序开发者,从上图可以看出,处于设备驱动层的Linux驱动程序为应用程序提供了访问硬件设备的编程接口(Application Programming Interface,API),它是真个设备驱动的核心内容。驱动程序主要提供以下功能: 应用程序通过驱动程序安全有效地访问硬件; 驱动程序作为嵌入式系统的中间层软件,它隐藏了底层的细节,从而提高了软件的可移植性和可复用性; 驱动程序文件节点可以方便地提供访问权限控制。 从下层驱动开发人员的角度来看,Linux驱动程序就是通过直接操控硬件的软件,来完成下面的功能: 对设备初始化和释放; 直接读写硬件寄存器来控制硬件; 把数据从内核传送到硬件和从硬件读取数据; 操作设备缓冲区设备; 操作输入、输出设备,如键盘、打印机等; 读取应用程序传送给设备文件的数据和回送应用程序请求的数据; 检测和处理设备出现的错误。 Linux 的一个重要特点就是将所有的设备都当做文件进行处理,这一类特殊文件就是设备文件,它们可以使用前面提到的文件、I/O相关函数进行操作,这样就大大方便了对设备的处理。它通常在“/dev”下面存在一个对应的逻辑设备节点,这个节点以文件的形式存在。 Linux 系统的设备文件分为四类:块设备文件、字符设备文件、网络设备文件和杂项设备文件。 块设备文件:通常指一些需要以块(如512字节)的方式写入的设备,如IDE硬盘、SCSI硬盘、光驱等; 字符型设备文件:通常指可以直接读写,没有缓冲区的设备,如并口、虚拟控制台等; 网络设备文件:通常是指网络设备访问的 BSD socket接口,如网卡等; 杂项设备文件:通常指的是比较特殊的驱动程序,如IIC、USB等。 设备号是一个数字,它是设备的标志。就如前面所述,一个设备文件(也就是设备节点)可以通过mknod命令来创建,其中指定了主设备号和次设备号。主设备号表明某一类设备,用于标识设备对应的驱动程序,一般对应着确定的驱动程序,主设备号相同的设备使用相同的驱动程序;次设备号一般是用于区分标明不同属性(例如不同的使用方法,不同的位置,不同的操作等),它标志着某个具体的物理设备。次设备号是一个8位数,用来区分具体设备的实例。因此,同一台机器上如果有两个相同的设备,则它们的主设备号相同,但第一个设备的次设备号为0,而第二个设备的次设备号为1。一般,高字节为主设备号和底字节为次设备号。例如,在系统中的块设备IDE 硬盘的主设备号是 3,而多个 IDE 硬盘及其各个分区分别赋予次设备号1、2、3…… Linux设备的设备号由主、次设备号构成,如果已经知道某设备的主、次设备号,可以利用MKDEV()宏来合成设备号。该宏定义如下(位于include/linux/kdev_t.h中): #define MKDEV(ma,mi) ((ma)8 | (mi)) 从宏定义可以看出,设备号高位存放着设备的主设备号,低8位存放着设备的次设备号。 如果已知设备的设备号,可以利用MAJOR()和MINOR()宏来将该设备的主、次设备号分离出来。该宏定义如下: #define MAJOR(dev) ((dev)8) #define MINOR(dev) ((dev) 0xff) Linux系统下,有关主设备号的分配原则,可以参看Documentation/Device.txt。 Linux驱动程序可以通过两种方式集成到内核中去: 一是将其直接编译到内核; 二是将其编写成模块,在需要添加某种硬件的时候,内核可以将其调入

您可能关注的文档

文档评论(0)

时间加速器 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档