如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
实验八嵌入式Linux设备驱动编程【实验目的】♦学习中断的相关知识♦学习驱动程序的编写,驱动程序的加载和使用♦掌握GPIO驱动和中断驱动的编写方法【实验学时】建议4学时【实验内容】♦掌握设备驱动程序的基本编写方法,学习基本的字符设备驱动程序的设计方法。♦掌握中断的知识,学习在linux下写针对S3C2440的LED驱动程序。【实验原理】UP-CUP2440开发平台设置了3个GPIO控制的LED,和1个可直接产生外部硬件中断的按键。LED分别使用S3C2410/S3C2440的GPC5,GPC6,GPC7(PXA270的GPIO0,GPIO1,GPIO52)三个GPIO,按键接到INT5中断(PXA270的GPIO97)【实验要求】调试验证程序,并提交实验报告。【实验步骤】1、helloworld设备驱动程序的编写使用如下步骤生成目录7-1-driver-hello中所给的helloworld驱动程序。(1)先检查一下系统的内核版本和内核头文件版本是一致,实验用Fedora,内核是2.6.27.5-117.fc10.i686分别在终端中输入命令,得到内核版本[root@PCForARM~]#uname-r2.6.27.5-117.fc10.i686[root@PCForARM~]#ls/usr/src/kernels/2.6.27.5-117.fc10.i686如果内核版本和内核头文件版本不一致,则在insmod一步会出现错误(2)编写hellodriver.c文件在目录下建一个hellodriver目录(文件夹),新建hellodriver.c文件,输入以下内容:#include</usr/src/kernels/2.6.27.5-117.fc10.i686/include/linux/init.h>#include</usr/src/kernels/2.6.27.5-117.fc10.i686/include/linux/module.h>MODULE_LICENSE("DualBSD/GPL");staticinthello_init(void){printk(KERN_ALERT"Hello,World!\n");return0;}staticvoidhello_exit(void){printk(KERN_ALERT"Goodbye,cruelworld\n");}module_init(hello_init);module_exit(hello_exit);(3)编写Makefile在/home/smbshare/7-1-driver-hello/下新建Makefile文件,输入下面内容:KERNELDIR=/lib/modules/2.6.27.5-117.fc10.i686/buildPWD:=$(shellpwd)INSTALLDIR=/home/smbshare/7-1-driver-hello/installobj-m:=hellodriver.omodules:$(MAKE)-C$(KERNELDIR)M=$(PWD)modulesmodules_install:cphellodriver.ko$(INSTALLDIR)clean:rm-rf*.o*~core.depend.*.cmd*.ko*.mod.c.tmp_versions.PHONY:modulesmodules_installclean注意绿色部分代码根据自己实际情况进行修改,还有cphellodriver.ko$(INSTALLDIR)rm-rf*.o*~core.depend.*.cmd*.ko*.mod.c.tmp_versions这两条语句前有<Tab>,否则在make时会出现错误。(4)进行make在终端输入命令:make-C/lib/modules/2.6.27.5-117.fc10.i686/build/M=/home/smbshare/7-1-driver-hello/modules这里有几点要注意:1、命令中的2.6.27.5-117.fc10.i686是内核版本,要根据目前使用的系统的内核版本进行修改;2、M=后面的是目录,也要根据实际情况进行修改;3、安装模块insmod/home/smbshare/7-1-driver-hello/hellodriver.ko安装完后可以用lsmod查看是否安装成功。可以看到在第一个位置就是我们的Hello模块。在安装时执行了hellodriver.c中如下的代码staticin