欢迎来到天天文库
浏览记录
ID:39487390
大小:85.00 KB
页数:7页
时间:2019-07-04
《字符设备驱动程序设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验七字符设备驱动程序设计实验目的掌握字符设备驱动程序编写的框架;掌握设备驱动相关的知识;实验原理参考本周大课课件《字符设备驱动程序.PPT》。实验步骤建立一个工作目录,我们的驱动程序模块程序保存在这个目录下;#mkdirfirst_drv#cdfirst_drv1自己编写一个字符设备驱动程序,程序格式参考下面;#include#include#include#include#include2、inux/types.h>#include#include//(1)编写硬件底层操作函数实现open,release,write,read......//(2)创建一个file_operations结构......staticint__initxxx_init(void){//(3)申请设备号........//(4)初始化cdev结构........//(5)注册cdev结构........return0;}staticvoid__exitXXX3、_exit(void){//注销cdev结构........//注销设备号}module_init(.......);module_exit(.......);MODULE_LICENSE(......);注意:要求底层函数要实现open,release,write,read方法。2编写Makefile文件内容格式,参考如下:obj-m+=模块程序文件名.oall:make-C内核源码路径M=`pwd`modules#这一行要以TAB键开头clean:make-C内核源码路径M=`pwd`modulescle4、an#这一行要以TAB键开头3编译模块,拷贝到根文件系统中编译内核模块,直接使用make命令就可以了;#make编译没有错误时,将模块拷贝到跟文件系统中;#cpxxx.ko/opt/rootfs/lib/modules/3.5.0-yyy/4启动开发板,进入linux系统后,在开发板上加载和卸载模块加载:#insmod/lib/modules/3.5.0-yyy/xxxx.ko查看系统分配的设备号#cat/proc/devices手动添加设备文件(设备节点)#mknod/dev/first_drvc主设备号次5、设备号5交叉编译应程序,打开设备文件进行读写操作实验成功后,叫老师查看实验结果,作为平时考察成绩;first_drv:#include#include#include#include#include#include#include#include#include6、o.h>staticintfirst_drv_open(structinode*in,structfile*fp){printk("firstdriveropencalled!");return0;}staticintfirst_drv_release(structinode*in,structfile*fp){printk("firstdriverreleasecalled!");return0;}staticintdata=0;staticssize_tfirst_drv_write(struct7、file*fp,constchar__user*buf,size_tlen,loff_t*offset){copy_from_user((void*)&data,buf,sizeof(int));printk("firstdriverwritecalled!datais%d",data);returnsizeof(int);}staticssize_tfirst_drv_read(structfile*fp,char__user*buf,size_tlen,loff_t*offset){data=data8、+1;copy_to_user(buf,&data,sizeof(int));printk("firstdriverreadcalled!");returnsizeof(int);}staticstructfile_operationsfirst_fops={.owner=THIS_MODULE,.open=first_drv_open,.release=first_drv_release,.w
2、inux/types.h>#include#include//(1)编写硬件底层操作函数实现open,release,write,read......//(2)创建一个file_operations结构......staticint__initxxx_init(void){//(3)申请设备号........//(4)初始化cdev结构........//(5)注册cdev结构........return0;}staticvoid__exitXXX
3、_exit(void){//注销cdev结构........//注销设备号}module_init(.......);module_exit(.......);MODULE_LICENSE(......);注意:要求底层函数要实现open,release,write,read方法。2编写Makefile文件内容格式,参考如下:obj-m+=模块程序文件名.oall:make-C内核源码路径M=`pwd`modules#这一行要以TAB键开头clean:make-C内核源码路径M=`pwd`modulescle
4、an#这一行要以TAB键开头3编译模块,拷贝到根文件系统中编译内核模块,直接使用make命令就可以了;#make编译没有错误时,将模块拷贝到跟文件系统中;#cpxxx.ko/opt/rootfs/lib/modules/3.5.0-yyy/4启动开发板,进入linux系统后,在开发板上加载和卸载模块加载:#insmod/lib/modules/3.5.0-yyy/xxxx.ko查看系统分配的设备号#cat/proc/devices手动添加设备文件(设备节点)#mknod/dev/first_drvc主设备号次
5、设备号5交叉编译应程序,打开设备文件进行读写操作实验成功后,叫老师查看实验结果,作为平时考察成绩;first_drv:#include#include#include#include#include#include#include#include#include6、o.h>staticintfirst_drv_open(structinode*in,structfile*fp){printk("firstdriveropencalled!");return0;}staticintfirst_drv_release(structinode*in,structfile*fp){printk("firstdriverreleasecalled!");return0;}staticintdata=0;staticssize_tfirst_drv_write(struct7、file*fp,constchar__user*buf,size_tlen,loff_t*offset){copy_from_user((void*)&data,buf,sizeof(int));printk("firstdriverwritecalled!datais%d",data);returnsizeof(int);}staticssize_tfirst_drv_read(structfile*fp,char__user*buf,size_tlen,loff_t*offset){data=data8、+1;copy_to_user(buf,&data,sizeof(int));printk("firstdriverreadcalled!");returnsizeof(int);}staticstructfile_operationsfirst_fops={.owner=THIS_MODULE,.open=first_drv_open,.release=first_drv_release,.w
6、o.h>staticintfirst_drv_open(structinode*in,structfile*fp){printk("firstdriveropencalled!");return0;}staticintfirst_drv_release(structinode*in,structfile*fp){printk("firstdriverreleasecalled!");return0;}staticintdata=0;staticssize_tfirst_drv_write(struct
7、file*fp,constchar__user*buf,size_tlen,loff_t*offset){copy_from_user((void*)&data,buf,sizeof(int));printk("firstdriverwritecalled!datais%d",data);returnsizeof(int);}staticssize_tfirst_drv_read(structfile*fp,char__user*buf,size_tlen,loff_t*offset){data=data
8、+1;copy_to_user(buf,&data,sizeof(int));printk("firstdriverreadcalled!");returnsizeof(int);}staticstructfile_operationsfirst_fops={.owner=THIS_MODULE,.open=first_drv_open,.release=first_drv_release,.w
此文档下载收益归作者所有