嵌入式应用程序设计 教学课件 华清远见嵌入式学院 穆煜 第8章 嵌入式Linux设备驱动编程.ppt

嵌入式应用程序设计 教学课件 华清远见嵌入式学院 穆煜 第8章 嵌入式Linux设备驱动编程.ppt

  1. 1、本文档共46页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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

您可能关注的文档

文档评论(0)

时间加速器 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档