- 1、本文档共59页,可阅读全部内容。
- 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驱动编写 张黎明 leeming1203@ 主要内容: 1.Linux驱动简述及字符型驱动的框架 2.基于Gpio的Linux字符型驱动设计 3.Linux键盘驱动的设计 1.Linux驱动简述及字符型驱动的框架 设备驱动程序是操作系统内核和机器硬件之间的接口.设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件, 应用程序可以象操作普通文件一样对硬件设备进行操作.设备驱动程序是内核的一部分,它完成以下的功能: 1.对设备初始化和释放. 2.把数据从内核传送到硬件和从硬件读取数据. 3.读取应用程序传送给设备文件的数据和回送应用程序 请求的数据. 4.检测和处理设备出现的错误. 设备,驱动,内核,应用程序之间的调用关系: 设备,驱动,文件系统,应用程序之间的调用关系: ⑴核心代码:设备驱动程序是核心的一部分,像核心中其他的代码一样,出错将导致系统的严重损伤。一个编写不当的设备驱动程序甚至能够使系统崩溃导致文件系统的破坏和数据的丢失; ⑵标准接口:设备驱动程序必须为Linux核心或者其从属的子系统提供一个标准的接口; ⑶核心机制:设备驱动程序可以使用标准的核心服务比如内存分配、中断发送和等待队列等; ⑷动态可加载:多数的Linux设备驱动程序可以在核心模块发出加载请求时进行加载,同时在不使用设备时进行卸载,这样核心可以有效地利用系统的资源 ⑸可配置:Linux设备驱动属于核心的一部分,用户可以根据自己的需要进行配置来选择适合自己的驱动 字符设备 以字节为单位逐个进行I/O操作 字符设备中的缓存是可有可无 不支持随机访问,如串口设备 块设备 块设备的存取是通过buffer、cache来进行 可以进行随机访问 例如IDE硬盘设备 可以支持可安装文件系统 网络设备 通过BSD套接口访问,网络接口 – 任何网络事务处理都是通过接口实现的,即,可以和其他宿 主交换数据的设备。通常接口是一个硬件设备,但也可以象 loopback(回路)接口一样是软件工具。 由于不是面向流的设备,所以网络接口不能象/dev/tty1那 样简单地映射到文件系统的节点上。Unix调用这些接口的方 式是给它们分配一个独立的名字(如eth0)。这样的名字在 文件系统中并没有对应项。内核和网络设备驱动程序之间的 通信与字符设备驱动程序和块设备驱动程序与内核间的通信 是完全不一样的。内核不再调用read,write,它调用与数 据包传送相关的函数。 1.4 Linux设备文件的概念 Linux抽象了对硬件的处理,所有的硬件设备都可以作为普通文件一样来看待 可以使用和操作文件相同的、标准的系统调用接口来完成打开、关闭、读写和I/O控制操作,对用户来说,设备文件与普通文件并无区别 字符设备和块设备是通过文件节点访问的。在Linux的文件系统中,可以找到(或者使用mknod创建)设备对应的文件名,称这种文件为设备文件。 主设备号:标识该设备的种类,也标识了该设备所使用的驱动程序 Linux内核支持动态分配主设备号 次设备号:标识使用同一设备驱动程序的不同硬件设备?? 每次内核调用一个设备驱动程序时, 它都告诉驱动程序它正在操作哪个 设备。主设备号和从设备号合在一 起构成一个数据类型并用来标别某 个设备。 MKDEV(ma,mi) ((ma)8 | (mi)) Linux设备驱动程序的代码结构大致可以分为如下几个部分: 文件操作结构体初始化 2.基于Gpio的Linux字符型驱动设计 2.1 流水灯Linux驱动步骤 第一步: 编写字符设备驱动 第二步:加载 第三步:编写应用程序测试设备驱动 2.2 第一步:编写流水灯Linux驱动 内容如下: #define KEY_MAJOR 249 /* 主设备号*/ #define LED_ON 1 #define LED_OFF 2 struct led_dev { struct cdev cdev; unsigned char value; }; struct led_dev *leddev; 打开和关闭操作 open和release函数会在设备打开和关闭时被调用,open的时候对设备进行初始化 写入和读出操作 设备操作 设备初始化 设备注销 修改Kconfig和Makefile 在相应的字符型驱动的目录顶部的Kconfig中添加如下语句: config SEP4020_FLOWLED tristate sep4020 flowed led 在相同目录底下的Makefile中添加如下语句: obj-$(CONFIG_SEP4020_FLOWLED) += sep4020_flowled.o 第二步: 驱动程序的
您可能关注的文档
- 2018届高考政 治一轮复习必修三:第2课文化对人的影响课件.ppt
- 2018届高三政 治一轮复习-第十二课-实现人生的价值.ppt
- 2018届高考语文(一轮)专题复习课件:专题十二-文学类文本阅读(一)小 说阅读-学案4.ppt
- 2018届高考地理专题23+世界地理+(共100张).ppt
- 2018年度中考复习:内能与内能的利用-的复习课件.ppt
- 2018年高考语文大一轮复习课件:专题十四-高考作文序列化写作训练-学案1高考新材料作文的审题立意.ppt
- 2018年高考英语阅读理解细节题专项分析.ppt
- 2018年高考语文补写句子课件(共37张).ppt
- 2018高考小 说复习.pptx
- 2018成语复习.pptx
文档评论(0)