嵌入式系统第八章 Linux环境下的驱动程序开发.pptVIP

嵌入式系统第八章 Linux环境下的驱动程序开发.ppt

  1. 1、本文档共44页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

最简单的内核模块1.helloworld模块源代码2.模块的编译3.模块的加载和卸载模块编译obj-m:=hello.o$(MAKE)–C$(KERNELDIR)M=$(PWD)modules模块加载insmodhello.ko模块卸载rmmodhelloGUNMAKE概述Makefile举例Makefile的基本结构(1/2)Makefile的基本结构(2/2)Makefile实例(1/3)Makefile实例(2/3)Makefile实例(3/3)目标的依赖关系my_appmy_app.ogreeting.omy_app.cfunctions\greeting.hfunctions\greeting.cgcc–cmy_app.c–Ifunctionsgcc-cfunctions\greeting.cgccmy_app.ogreeting.o-omy_appmake的工作过程现在来看一下make做的工作:首先make按顺序读取makefile中的规则,然后检查该规则中的依赖文件与目标文件的时间戳哪个更新。(1)如果目标文件的时问戳比依赖文件还早,就按规则中定义的命令更新目标文件。(2)如果该规则中的依赖文件又是其他规则中的目标文件,那么依照规则链不断执行这个过程,直到Makefile文件的结束,至少可以找到一个不是规则生成的最终依赖文件,获得此文件的时间戳(3)然后从下到上依照规则链执行目标文件的时间戳比此文件时间戳旧的规则,直到最顶层的规则通过以上的分析过程,可以看到make的优点,因为.o目标文件依赖.c源文件,源码文件里一个简单改变都会造成那个文件被重新编译,并根据规则链依次由下到上执行编译过程,直到最终的可执行文件被重新连接。变量的定义和使用Makefile变量举例Make命令行选项*嵌入式系统主讲内容第1章嵌入式系统概述第2章ARM微处理器概述第3章熟悉ARM嵌入式实验系统第4章ARM指令集及汇编第5章ADS1.2集成开发环境和ARM仿真器介绍第6章Linux使用基础第7章Linux系统开发环境第8章Linux环境下的驱动程序开发设备驱动程序是操作系统内核和机器硬件之间的接口.设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作Linux设备驱动程序Linux设备驱动程序分类

Linux将设备按照功能特性划分为三种类型:字符设备,块设备和网络设备。字符设备:以字符为单位输入输出数据的设备,一般不需要使用缓冲区而直接对他进行读写。各种串行接口,并行接口等块设备:以一定大小的数据块为单位输入输出,大多要使用缓冲区在设备与内存之间传送数据。磁盘设备等网络设备:通过通信网络来传输数据的设备,网卡等。在操作系统中的位置设备驱动程序是内核代码的一部分。驱动程序的地址空间是内核的地址空间。驱动程序的代码直接对设备硬件(实际是设备的各种寄存器)进行控制(实际就是读写操作)。应用程序通过操作系统的系统调用执行相应的驱动程序函数。中断则直接执行相应的中断程序代码。设备驱动程序的file_operations结构体的地址被注册到内核中的设备链表中。块设备和字符设备以设备文件的方式建立在文件系统中的/dev目录下,而且每个设备都有一个主设备号和一个次设备号。主设备号和次设备号主设备号相同的设备使用相同的驱动程序,次设备号用于区分具体设备的实例。主设备号标识设备对应的驱动程序一个驱动程序可以控制若干个设备,次设备号提供了一种区分它们的方法系统增加一个驱动程序就要赋予它一个主设备号。这一赋值过程在驱动程序的初始化过程中主设备号和次设备号8.1.2驱动程序中的基本要素1.两个函数module_init(XXX_init);module_exit(XXX_exit);驱动程序没有main函数,通过使用宏module_init(初始化函数名)将初始化函数加入内核全局初始化函数列表中,在内核初始化时执行驱动的初始化函数,从而完成驱动的初始化和注册,之后驱动便停止等待被应用软件调用。驱动程序中有一个宏moudule_exit(退出处理函数名)注册退出处理函数。它在驱动退出时被调用。驱动程序中是不能使用标准C库的8.1.2驱动程序中的基本要素2.一个宏

文档评论(0)

t_github + 关注
实名认证
文档贡献者

计算机研究者

1亿VIP精品文档

相关文档