- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第四章 LED驱动程序 Linux设备驱动程序 教学课件
设备驱动程序 第四章 LED驱动程序 目录 嵌入式Linux字符设备的驱动程序结构 设备驱动程序中的问题 GPIO原理介绍 LED的驱动程序实例及测试 目录 嵌入式Linux字符设备的驱动程序结构 设备驱动程序中的问题 GPIO原理介绍 LED的驱动程序实例及测试 嵌入式Linux字符设备的驱动程序结构 字符设备驱动程序是嵌入式Linux 最基本、也是最常用的驱动程序。 它的功能非常强大,几乎可以描述 不涉及挂载文件系统的所有设备。 其接口流程图: 在Linux系统中,字符设备驱动组成: 常用的头文件 字符设备模块加载与卸载函数 字符设备驱动的file_operations结构体中 成员函数 嵌入式Linux驱动程序常用的头文件 驱动程序中头文件是不可缺少的:P24 #include linux/module.h//模块加载的头文件 #include asm/hardware.h//和你具体的开发板有关的寄存器地址等相关操作的宏 File_operations结构体 struct file_operations GPIO_LED_ctl_ops ={ open: GPIO_LED_open, read: GPIO_LED_read, write: GPIO_LED_write, ioctl: GPIO_LED_ioctl, release: GPIO_LED_release, }; Linux的设备文件同硬件一一对应的,因而应用程序中对设备的操作可以通过对设备文件的操作来实现。而这些操作方式其实就是一些标准的系统调用。 每个文件都具有各自的file_operations数据结构。实际上, file_operations 就是把系统调用和驱动程序绑定在一起,将标准的系统调用函数指向对应于设备的具体函数。 File_operations结构体 在系统内部,I/O设备的存取操作通过特定的入口点来进行,而这组特定的入口点恰恰是由设备驱动程序提供的。通常这组设备驱动程序接口是由结构file_operations结构体向系统说明的。 Linux的设备文件是同硬件一一对应的,因而对设备的操作可以通过对设备文件的操作来实现。而这些操作方式其实就是一些标准的系统调用,如open()、read()、write()、close()等。实际上,file_operations就是把系统调用和驱动程序关联起来的关键数据结构。这个结构的每个成员都对应着一个系统调用。 当用户进程利用系统调用对设备文件进行读写操作时,这些系统调用通过设备的主设备号和次设备号来确定相应的设备驱动程序,然后读取file_operations中相应的函数指针,接着把控制权交给函数,从而完成了Linux设备驱动程序的工作。 字符设备驱动程序的入口 Open入口点 Open函数负责打开设备、准备I/O。 Open函数必须对将要进行I/O操作做好必要的准备工作。如清除缓冲区。如果设备是独占的,则open函数必须将设备标记成忙状态。 Close入口点 Close函数负责关闭设备的操作。 当最后一次使用设备完成后,调用close函数,关闭设备文件。独占设备必须标记为可再次使用。 字符设备驱动程序的入口 Read入口点 Read函数负责从设备上读数据和命令,有缓冲区的I/O设备操作一般是从缓冲区里读数据。 Write入口点 Write函数负责往设备上写数据。有缓冲区的I/O设备操作一般是把数据写入到缓冲区里。 Ioctl入口点 Ioctl函数执行读、写之外的操作,主要实现对设备的控制。 字符设备驱动程序的入口 Select入口点 Select函数检查设备,看数据是否可读取或设备是否可用于写数据。 系统调用在检查与设备文件相关的文件描述符时,使用select入口点。 如果驱动程序没有提供select入口,select操作将认为设备已经准备好进行任何I/O操作。 设备模块加载与卸载函数 为了使应用程序可以操作硬件设备(享用驱动程序提供的服务),因此,需要将用户自编写的驱动程序以模块的方式动态加载(insmod)至内核中。 这就要求驱动程序中必须具备模块的基本要素,即包含模块加载module_init与卸载函数module_ _exit 。 驱动程序的设备注册 在设备驱动程序模块初始化的时候,设备驱动程序会通过入口点向系统登记一个字符设备的驱动程序,以便系统在适当的时候调用。 嵌入式Linux系统里,通过调用register-chrdev向系统注册字符型设备驱动程序。如果操作成功,设备名就会出现在/proc/devices文件里。 另外,在驱动程序中还需调用devfs_register在/dev目录下创建设备文件节点,作为应用程序访问设备的入口。
文档评论(0)