- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第2章 嵌入式Linux操作系统 第6章 嵌入式Linux驱动程序开发 设备驱动程序 设备驱动就是“驱使硬件设备行动”:与底层硬件直接打交道,按照硬件设备的具体工作方式读写设备寄存器,完成设备的轮询、中断处理、DMA通信、最终实现设备的功能。 设备驱动是硬件与应用软件之间的纽带(接口),在有操作系统情况下,设备驱动是硬件与操作系统内核之间的接口,应按照相应的架构设计设备驱动,才能方便整合到相应的操作系统中。 驱动程序的功能 从应用程序方看,驱动程序应为应用程序提供访问硬件设备的编程接口,主要提供以下功能: 应用程序通过驱动程序安全有效地访问硬件; 驱动程序隐藏底层细节,从而提高应用软件的可移植性和可复用性; 驱动程序文件节点可方便地提供访问权限控制。 嵌入式Linux驱动基本原理 Linux中的设备大多数是被当做文件(称为设备文件)来处理。上层的应用程序需要操作硬件时,只需要获得设备的文件描述符,通过系统调用open(),read(),write(),ioctl(),close()等来操作设备,无需关心硬件细节。 嵌入式Linux驱动基本原理 嵌入式Linux驱动基本原理 Linux设备基本知识 Linux的设备驱动程序通常在“/dev”下面存在一个对应的逻辑设备节点。 Linux设备分类 Linux 系统的设备文件分为四类:块设备文件、字符设备文件、网络设备文件和杂项设备文件。 块设备:以块(如512字节)方式访问的设备,如IDE硬盘、SCSI硬盘、光驱等; 字符型设备:可直接读写、没有缓冲区的设备,如并口、虚拟控制台等; 网络设备:网络设备访问的 BSD socket接口,如网卡等; 杂项设备:特殊驱动程序,如IIC、USB等。 Linux设备号 设备号是一个数字,是设备的标志,由主设备号和次设备号组成,主设备号表明某一类设备,主设备号相同的设备使用相同的驱动程序;次设备号用来标识具体设备的实例。 例如,系统中块设备IDE 硬盘的主设备号是 3,而多个 IDE 硬盘及其各个分区分别赋予次设备号1、2、…… 一个设备文件(即设备节点)可通过mknod命令来创建。如:mknod /dev/led c 200 0 Linux设备号 根据主、次设备号,可用宏MKDEV() 来合成设备号。该宏在include/linux/kdev_t.h中定义: #define MKDEV(ma,mi) ((ma)8 | (mi)) 根据设备号,可用宏MAJOR()和MINOR()将主、次设备号分离出来。该宏定义如下: #define MAJOR(dev) ((dev)8) #define MINOR(dev) ((dev) 0xff) Linux系统下有关主设备号的分配原则,可参看documentation/device.txt。 内核模块 Linux驱动程序可通过两种方式集成到内核中去: 直接编译到内核; 编写成模块,需要时内核将其调入。在配置Linux内核时,可以选择“Enable loadable module support”选项,来支持可加载内核模块。 内核模块管理命令 可加载的内核模块通常情况下安装在系统“/lib/modules”目录的一个子目录下。用户可通过模块操作命令来对模块进行管理。 驱动层次结构 Linux 设备驱动程序包含设备服务子程序和中断处理程序两部分: 设备服务子程序:包含所有与设备操作相关的处理代码。它从面向用户进程的设备文件系统中接受用户命令,并对设备控制器执行操作。 中断处理程序:设备控制器需要获得系统服务时有两种方式:查询和中断。驱动程序是内核的一部分,在设备查询期间系统不能运行其他代码,工作效率比较低,故大多设备以中断方式向设备驱动程序发出输入/输出请求。 设备驱动程序与外界接口 设备驱动程序与外界的接口可分为三个部分: 与操作系统内核的接口:这部分是通过数据结构 file_operations来完成的。 与系统引导的接口:这部分利用驱动程序对设备进行初始化。 与设备的接口:这部分描述了驱动程序如何与设备进行交互,这与具体设备密切相关。 Linux设备驱动程序的特点 内核代码 内核接口 内核机制和服务 可装载 可设置 动态性 驱动开发流程 设计模块时必须遵循Linux的标准,否则无法通过insmod加入到内核中。 应用程序用main函数作为程序的入口点,驱动模块则是在 insmod时被加载,此时的入口点是init_module函数,完成设备的注册。在 rmmod时被卸载,此时的入口点是cleanup_module函数,完成设备的卸载。 在设备完成注册加载之后,应用程序就可以对该设备进行规定的操作,如read、write等,而驱动程序就是用
您可能关注的文档
最近下载
- 3L.01.01 ×× U9 ERP项目-系统上线切换方案.docx VIP
- Unit 6 What are our homes like Period 4 Extend 单元教学设计 沪教版三年级下册英语.docx
- 日立电梯HGE-Ⅲ、HGP-S、HGE-S、HGP(ELS04)电梯规格表参数说明.pdf VIP
- 文明主题班会主题.docx VIP
- 清电硅业培训课件.pptx
- 共享农场的运营模式项目建议书.pptx VIP
- 构音障碍(运动性)课件.pptx VIP
- 法人兼职合同6篇.docx VIP
- 2024年中级注册安全工程师《其他安全实务》真题及答案解析.docx VIP
- 2025年辅警招聘公安基础知识题及答案.docx VIP
文档评论(0)