,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,亿道电子有限公司出品,*,实验七,驱动程序结构实验,亿道电子有限公司,2005,年,5,月,1,亿道电子有限公司出品,提纲,实验目的,实验原理,实验内容,实验小结,习题与思考题,2,亿道电子有限公司出品,实验目的,了解驱动程序的结构,了解驱动程序常用结构体,了解驱动程序常用函数,3,亿道电子有限公司出品,实验原理,驱动程序介绍,驱动程序是一组代码,这部分代码负责将应用程序的一些需求,如读、写等操作,正确无误的传递给相关的硬件,并使硬件能够做出正确反应的代码。驱动程序像是一个黑盒子,它隐藏了硬件的工作细节,应用程序只需要通过一组标准化的接口,就可以实现对硬件的操作。,4,亿道电子有限公司出品,实验原理,Linux,设备驱动程序的分类,字符设备,块设备,网络设备,5,亿道电子有限公司出品,实验原理,驱动程序结构,6,亿道电子有限公司出品,实验原理,内核模块,Kernel Module,是,Linux,系统启动之后能够动态进行,load,unload,的,kernel,的组成要素。因此不需对,kernel,进行重新编译或系统重启也可将,kernel,的一部分替换掉。设备驱动,文 件系统,网络协议等可做成模块来提供。,7,亿道电子有限公司出品,实验原理,主,从设备号,应用程序通过文件系统的名字,(,或节点,),来进行访问这些设备,所有的设备节点在,/dev,目录下。,主设备号用于,kernel,中区分设备驱动,次设备号用于设备驱动内区分设备。一个设备驱动可能控制多个设备。新的设备驱动要有新的主设备号。,Documentation/devices.txt,中定义了所有设备的主设备号。当自己传建设备的时候不要与常用的设备好冲突。,$,mknod,/dev/hda1 b 127 1,$,ls,al /dev/hda1,$,brw-rw,-1 root disk 3 1 Mar 25 12:00 /dev/hda1,8,亿道电子有限公司出品,实验原理,驱动程序基本框架,初始化设备模块,设备打开模块,数据读写和控制模块,中断处理模块(有的驱动程序没有),设备释放模块,设备卸载模块。,9,亿道电子有限公司出品,实验原理,重要结构体,file_operation,file,10,亿道电子有限公司出品,实验内容,hello_world,模块加载实验,实验代码,#include,int,init_module(void),printk,(Hello,worldn);,return 0;,void cleanup_module(void),printk,(Goodbye worldn);,11,亿道电子有限公司出品,实验内容,编译,$arm-,linux-gcc,I/XSBase255/Kernel/2.4.18-rmk7-pxa1-XSBase/incluse D_KERNEL_-DMODULE Wall O2 o hello_world.o hello_world.c,12,亿道电子有限公司出品,实验内容,下载到目标平台,在,minicom,Ctrl+a,s,13,亿道电子有限公司出品,实验内容,挂载目标代码,$,insmod,hello_world.o,$Hello,world,$,lsmod,$hello_world,$,rmmod,hello_world,$Goodbye world,14,亿道电子有限公司出品,思考题,如何解决模块加载过程中的内核版本兼容的问题,如何实现一内存读写模块驱动程序,15,亿道电子有限公司出品,