欢迎来到天天文库
浏览记录
ID:46240419
大小:129.71 KB
页数:53页
时间:2019-11-22
《嵌入式Linux应用开发教程华清远见嵌入式学院赵苍明穆煜第八章嵌入式Linux设备驱动编程》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、华清远见JFARflGHTj嵌入式培训专家嵌入式学院华清远见旗下品牌嵌入式应用程序设计第八章嵌入式Linux设备驱动编程本章课程:►8.1设备驱动概述►8.2字符设备驱动编程►8.3GPIO驱动程序实例►8.44*4扫描按键驱动►8.5小结►8.6思考与练习嵌入式学院华清远见旗下品牌8.1设备驱动编程基础嵌入式学院华清远见旗下品牌卜8.1.1Linux设备驱动概述►设备驱动概念►操作系统是通过各种驱动程序来驾驭硬件设备的,它为用户屏蔽了各种各样的设备,驱动硬件是操作系统最基本的功能,并且提供统一的操作方式。设备驱动程序是操作系统最基本的组成部分之一,在Linux内核源程序中也占有6
2、0%以上。因此,熟悉驱动的编写是很重要的。►Linux的一个重要特点就是将所有的设备都当做文件进行处理,这一类特殊文件就是设备文件(通常在/dev目录下),这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作,这样就大大方便了对设备的处理。8.1设备驱动编程基础嵌入式学院华清远见旗下品牌卜8.1.1Linux设备驱动概述►Linux系统的设备分为三类:字符设备、块设备和网络设备。►字符设备通常指像普通文件或字节流一样,以字节为单位顺序读写的设看,如并口设备、虚拟控制台等。►块设备通常指一些需要以块为单位随机读写的设备,如IDE硬盘、SCSI
3、硬盘、光驱等。►网络设备通常是指通过网络能够与其他主机进行数据通信的设备,如网卡等。8.1设备驱动编程基础►8.1.1Linux设备驱动概述►设备驱动程序的特点►内核代码►内核接口►内核机制和服务►可装载►可设置►动态性嵌入式学院华清远见旗下品牌►8.1.1Linux设备驱动概述►设备驱动程序与整个软硬件系统的关系用户应用程序Linux系统调用接口操作系统硬件程理进管卜&1.2Linux内核模块编程►设备驱动和内核模块►Linux设备驱动属于内核的一部分,Linux内核的一个模块可以以两种方式被编译和加载。□直接编译进Linux内核,随同Linux启动时加载;□编译成一个可加载和删
4、除的模块。卜&1.2Linux内核模块编程►模块相关命令►Lsmod列出当前系统中加载的模块►Rmmod用于将当前模块卸载。►insmod和modprobe用于加载当前模块卜8.1.2Linux内核模块编程►Linux内核模块编程►(1)内核模块的程序结构►一个Linux内核模块主要由以下几个部分组成。□模块加载函数(必须)□模块卸载函数(必须)□模块许可证声明(必须□模块参数(可选)□模块导出符号(可选)□模块作者等信息声明(可选)卜8.1.2Linux内核模块编程►Linux内核模块编程►(2)模块加载函数staticint_initinitialization_functio
5、n(void){/*初始化代码*/}module_init(initialization_function);卜8.1.2Linux内核模块编程►Linux内核模块编程►(3)模块卸载函数staticvoid_exitcleanup_function(void){/*释放代码*/}module_exit(cleanup_function);►通常来说,模块卸载函数要完成与模块加载函数相反的功能□若模块加载函数注册XXX,则模块卸载函数应该注销XXX0□若模块加载函数动态申请了内存,则模块卸载函数应释放该内存。□若模块加载函数申请了硬件资源(中断、DMA通道、I/O端口和I/O内存等
6、)的占用,则模块卸载函数应释放这些硬件资源。□若模块加载函数开启了硬件,则卸载函数中一般要关闭硬件。卜8.1.2Linux内核模块编程►Linux内核模块编程►(4)模块参数□t4module_param(#数名渗数类型渗数读/写权限)”为模块定义一个参数staticchar*str_param="LinuxModuleProgramn;staticintnum_param=4000;module_param(num_param,int,S_IRUGO);module_param(str_param,charp,S_IRUGO);卜8.1.2Linux内核模块编程►Linux内核模
7、块编程►(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.2Linux内核模块编程►L
此文档下载收益归作者所有