- 1、本文档共46页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式应用程序设计第8章 嵌入式Linux设备驱动编程 第1章 搭建嵌入式Linux开发环境 第2章 嵌入式文件I/O编程 第3章 嵌入式Linux多任务编程 第4章 嵌入式Linux进程间通行 第5章 嵌入式Linux多线程编程 第6章 嵌入式Linux网络编程 第7章 Qt图形编程 第8章 嵌入式Linux设备驱动编程 第9章 Qt聊天项目设计 8.1 设备驱动编程基础 8.2 字符设备驱动编程 8.3 GPIO驱动程序实例 8.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内核模块编程 一个Linux内核模块主要由以下几个部分组成。 模块加载函数(必须) 模块卸载函数(必须) 模块许可证声明(必须 模块参数(可选) 模块导出符号(可选) 模块作者等信息声明(可选) 8.1.2 Linux内核模块编程 Linux内核模块编程 模块加载函数 static int __init initialization_function(void) { /* 初始化代码 */ } module_init(initialization_function); 模块卸载函数 static void __exit cleanup_function(void) { /* 释放代码 */ } module_exit(cleanup_function); 8.1.2 Linux内核模块编程 Linux内核模块编程 通常来说,模块卸载函数要完成与模块加载函数相反的功能 若模块加载函数注册XXX,则模块卸载函数应该注销XXX。 若模块加载函数动态申请了内存,则模块卸载函数应释放该内存。 若模块加载函数申请了硬件资源(中断、DMA通道、I/O端口和I/O内存等)的占用,则模块卸载函数应释放这些硬件资源。 若模块加载函数开启了硬件,则卸载函数中一般要关闭硬件。 8.1.2 Linux内核模块编程 Linux内核模块编程 模块参数 “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内核模块编程 导出符号 EXPORT_SYMBOL(符号名); EXPORT_SYMBOL_GPL(符号名); 模块声明与描述 MODULE_AUTHOR(author); MODULE_DESCRIPTION(description); MODULE_VERSION(version_string); MODU
您可能关注的文档
- 嵌入式系统技术教程 教学课件 作者 张石 第四章ARM程序设计基础.ppt
- 嵌入式系统技术教程 教学课件 作者 张石 第五章 应用系统设计与调试.ppt
- 嵌入式系统技术教程 教学课件 作者 张石 第一章ARM微处理器概述.ppt
- 嵌入式系统技术教程 教学课件 作者 张石 教学安排.ppt
- 嵌入式系统技术与设计 第2版 教学课件 作者 华清远见教育集团 刘洪涛 苗德行 第1章 嵌入式系统概述.ppt
- 嵌入式系统技术与设计 第2版 教学课件 作者 华清远见教育集团 刘洪涛 苗德行 第2章 ARM体系结构与指令集1.ppt
- 嵌入式系统技术与设计 第2版 教学课件 作者 华清远见教育集团 刘洪涛 苗德行 第3章 ARM汇编语言程序设计1.ppt
- 嵌入式系统技术与设计 第2版 教学课件 作者 华清远见教育集团 刘洪涛 苗德行 第4章 嵌入式软件基础实验.ppt
- 嵌入式系统技术与设计 第2版 教学课件 作者 华清远见教育集团 刘洪涛 苗德行 第5章 ARM应用系统设计.ppt
- 嵌入式系统技术与设计 第2版 教学课件 作者 华清远见教育集团 刘洪涛 苗德行 第7章 嵌入式操作系统及开发简述.ppt
最近下载
- STM32平台软件升级方法.doc VIP
- 做人间清醒,拒绝恋爱脑.pptx
- 无菌检(化)验员职业技能鉴定微生物培训考试题库含答案.docx
- 天翼云认证解决方案架构师重点知识点V2.0.pdf VIP
- 12J609 防火门窗图集(正式版).pdf
- 河南省南阳市2022-2023学年六年级下学期语文期末考试试卷(含答案).pdf VIP
- 2023年高速公路服务区出行热度分析报告(1~6月)-94页.doc VIP
- 2024春国家开放大学04963_学前儿童数学教育活动指导期末考试题含答案.doc
- 北师大版小学四年级数学上册第八单元测试卷.docx VIP
- 幼小衔接拼音第一课(课堂PPT).ppt
文档评论(0)