- 1、本文档共45页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式应用程序设计第八章 嵌入式Linux设备驱动编程 8.1 设备驱动概述 8.2 字符设备驱动编程 8.3 GPIO驱动程序实例 8.4 4*4扫描按键驱动 8.5 小结 8.6 思考与练习 8.1.1 Linux设备驱动概述 设备驱动概念 操作系统是通过各种驱动程序来驾驭硬件设备的,它为用户屏蔽了各种各样的设备,驱动硬件是操作系统最基本的功能,并且提供统一的操作方式。设备驱动程序是操作系统最基本的组成部分之一,在Linux内核源程序中也占有60%以上。因此,熟悉驱动的编写是很重要的。 Linux的一个重要特点就是将所有的设备都当做文件进行处理,这一类特殊文件就是设备文件(通常在/dev目录下),这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作,这样就大大方便了对设备的处理。 8.1.1 Linux设备驱动概述 Linux系统的设备分为三类:字符设备、块设备和网络设备。 字符设备通常指像普通文件或字节流一样,以字节为单位顺序读写的设备, 如并口设备、虚拟控制台等。 块设备通常指一些需要以块为单位随机读写的设备,如IDE硬盘、SCSI硬盘、光驱等。 网络设备通常是指通过网络能够与其他主机进行数据通信的设备,如网卡等。 8.1.1 Linux设备驱动概述 设备驱动程序的特点 内核代码 内核接口 内核机制和服务 可装载 可设置 动态性 8.1.1 Linux设备驱动概述 设备驱动程序与整个软硬件系统的关系 8.1.2 Linux内核模块编程 设备驱动和内核模块 Linux设备驱动属于内核的一部分,Linux内核的一个模块可以以两种方式被编译和加载。 直接编译进Linux内核,随同Linux启动时加载; 编译成一个可加载和删除的模块。 8.1.2 Linux内核模块编程 模块相关命令 Lsmod 列出当前系统中加载的模块 Rmmod 用于将当前模块卸载。 insmod和modprobe 用于加载当前模块 8.1.2 Linux内核模块编程 Linux内核模块编程 (1)内核模块的程序结构 一个Linux内核模块主要由以下几个部分组成。 模块加载函数(必须) 模块卸载函数(必须) 模块许可证声明(必须 模块参数(可选) 模块导出符号(可选) 模块作者等信息声明(可选) 8.1.2 Linux内核模块编程 Linux内核模块编程 (2)模块加载函数 static int __init initialization_function(void) { /* 初始化代码 */ } module_init(initialization_function); 8.1.2 Linux内核模块编程 Linux内核模块编程 (3)模块卸载函数 static void __exit cleanup_function(void) { /* 释放代码 */ } module_exit(cleanup_function); 通常来说,模块卸载函数要完成与模块加载函数相反的功能 若模块加载函数注册XXX,则模块卸载函数应该注销XXX。 若模块加载函数动态申请了内存,则模块卸载函数应释放该内存。 若模块加载函数申请了硬件资源(中断、DMA通道、I/O端口和I/O内存等)的占用,则模块卸载函数应释放这些硬件资源。 若模块加载函数开启了硬件,则卸载函数中一般要关闭硬件。 8.1.2 Linux内核模块编程 Linux内核模块编程 (4)模块参数 “module_param(参数名,参数类型,参数读/写权限)”为模块定义一个参数 static char *str_param = Linux Module Program; static int num_param = 4000; module_param(num_param, int, S_IRUGO); module_param(str_param, charp, S_IRUGO); 8.1.2 Linux内核模块编程 Linux内核模块编程 (5)导出符号 EXPORT_SYMBOL(符号名); EXPORT_SYMBOL_GPL(符号名); (6)模块声明与描述 MODULE_AUTHOR(author); MODULE_DESCRIPTION(description); MODULE_VERSION(version_string); MODULE_DEVICE_TABLE(table_info); MODULE_ALIAS(alternate_name); 8.1.2 Linux内核模块编程 Linux内核模块编程 (7)模块的使用计数 Linux 2.4内核中,模块自身通过MO
您可能关注的文档
- 汽油发动机微机控制系统检修 任务单 1.3任务单.doc
- 汽油发动机微机控制系统检修 任务单 2.1任务单.doc
- 汽油发动机微机控制系统检修 任务单 2.2任务单.doc
- 汽油发动机微机控制系统检修 任务单 2.3任务单.doc
- 汽油发动机微机控制系统检修 任务单 2.4任务单.doc
- 汽油发动机微机控制系统检修 任务单 2.5任务单.doc
- 汽油发动机微机控制系统检修 任务单 2.6任务单.doc
- 汽油发动机微机控制系统检修 任务单 2.7任务单.doc
- 汽油发动机微机控制系统检修 任务单 2.8任务单.doc
- 汽油发动机微机控制系统检修 任务单 3.1有分电器点火系统任务单.doc
- 《中国通史》文字稿第12集春秋争霸.docx
- java教程--类与对象-讲义课件(演讲稿).ppt
- Vue应用程序开发-(1).pptx
- 东北师大版社劳动实践与评价指导手册一年级上册主题二活动一寻找五彩的树叶课时课件.pptx
- 外研版英语四年级上册 Module 4 Unit 2 How much is it单元教学设计.docx
- 外研版英语四年级上册Module 4 单元整体教学设计.docx
- 6《上课之前》课件 鄂科技版 心理健康教育一年级.pptx
- 《1~5的认识》说课课件(共25张PPT)人教版一年级上册数学.pptx
- 六《解决问题(1)》说课课件 人教版 三年级上册数学.pptx
- 七《解决问题》说课课件 人教版 二年级上册数学.pptx
文档评论(0)