2022年博创嵌入式培训PPT嵌入式Linux接口设计与驱动程序.pptVIP

2022年博创嵌入式培训PPT嵌入式Linux接口设计与驱动程序.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文档。上传文档
查看更多

第4章

嵌入式Linux接口设计与驱动程序

;第四章嵌入式Linux接口设计与

驱动程序;内容:

一、Linux驱动程序简介

二、开发驱动程序的方法

三、设备驱动程序的分类

四、主设备号和次设备号

五、设备文件系统(devfs)与udevfs;

大多数操作系统都把内核和运行在其上的应用程序分为两个层次进行管理,即“内核态”和“用户态”。内核态有较高的权限,可以控制处理器内存的映射和分配方式,访问外设空间和处理器的特殊状态寄存器,控制中断和DMA等;而用户态则只能运行应用程序。从用户态到内核态的切换通常可通过软件中断实现。

在有MMU?的处理器上,Linux系统把内核重新映射在3GB(即0xC0000000)以上的虚拟地址空间——内核空间;每个应用程序或进程都通过MMU建立独立寻址空间——用户空间。一个进程不可以(因为有MMU映射的保护)随便修改或访问另一个进程中的数据和代码。进程之间要进行数据交互,或者经过内核传递,或者通过内核映射共享内存。?;

作为系统内核的一部分,驱动程序工作在内核态,而应用程序工作在用户态。也就是说,不能直接通过指针把用户空间的数据地址传递给内核(因为MMU映射的地址根本不一样)。要想在应用程序和驱动程序之间传递数据(指针),就要经过转换,把用户态“看”到的空间地址转换成内核态可访问的地址。Linux系统提供了一系列函数,可方便地实现这种转换,它们自己负责检查访问权限,使用时不需要考虑更多问题。

设备驱动程序应该只为系统的其他部分提供使用设备的能力,至于使用方法应该由应用程序来提供。也就是说,应用程序通过调用硬件设备对应的驱动程序来完成自己的目的,而调用什么,驱动程序则不需要知道。因此,在编写驱动程序时需要考虑下面三个方面:提供尽量多的选项给用户;提高驱动程序的速度和效率;尽量使驱动程序简单。?;

一般来说,开发驱动程序有两种方法。一种方法是直接编译到内核,再运行新的内核来测试。这种方法虽然效率较低,但在某些场合是唯一的选择。第二种方法是编译为模块的形式,单独加载、运行、调试。这种方法不需要重新启动内核,只需要通过insmod和rmmod命令进行驱动模块增加和删减操作即可,使得驱动调试效率大大提高。

在编译内核的过程中,如上图所示可以看到编译过程中有三种选项:

M表示编译成模块方式,

表示将其编译到内核之中,

如果没有选择则表示不编译该功能。

;

Linux内核一般把驱动程序分为4种类型:字符设备、块设备、网络设备以及不属于这三种设备类型的其它设备类型。其中,字符设备和块设备可以像文件一样被访问。例如,驱动程序通常会实现open、close、read、write或seek等操作。网络设备在Linux系统中是一类比较特殊的设备,它不像字符或块设备那样通过对应的设备文件节点访问,内核也不再通过read或write等调用去访问网络设备。

设备驱动程序是内核代码的一部分,其地址空间是内核的地址空间。应用程序通过操作系统的系统调用执行相应的驱动程序函数,中断则直接执行相应的中断程序代码。当设备驱动程序的file_operations结构体的地址被注册到内核中的设备链表中之后,块设备和字符设备以设备文件的方式建立在文件系统中的/dev目录下,而且每个设备都有一个主设备号和一个次设备号。?;

在传统方式的设备管理中,除了设备类型外,内核还需要主次设备号两个参数,才能唯一标识某个设备。

如上图所示,在每一行的第一组中,第一个字母如果是c,表示该设备是字符设备;如果是b,表示该设备是块设备;如果是d,则表示是个目录。第一组的其他字母表示该设备的各种权限。第五组的数字表示主设备号,第六组数字表示次设备号。

例如,字符设备audio1和audio的主设备号都是14,而次设备号分别为20和4。Linux系统是靠主次设备号来联系驱动程序和设备文件节点的(而不是设备文件的路径)。系统依靠主设备号标识不同的驱动程序,在同一个系统中,一类设备的主设备号是唯一的,因此上例中audio1和audio使用同一个驱动程序。次设备号只是在驱动程序内部使用,系统内核直接把次设备号传递给驱动程序,由驱动程序管理。为了保证驱动程序的通用性,避免驱动程序移植过程中主设备号冲突,理想的方式是给每个设备驱动动态地分配主设备号。

;

值得注意的是,设备文件系统(devfs)在Linux2.6早期内核(Linux2.6.15以前的版本)中被标记为舍弃;在Linux2.6.15及以后的版本则取消了对它的支持。Li

文档评论(0)

192****8848 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档