实验二:字符设备驱动实验

实验二:字符设备驱动实验

ID:39690608

大小:54.51 KB

页数:9页

时间:2019-07-09

实验二:字符设备驱动实验_第1页
实验二:字符设备驱动实验_第2页
实验二:字符设备驱动实验_第3页
实验二:字符设备驱动实验_第4页
实验二:字符设备驱动实验_第5页
资源描述:

《实验二:字符设备驱动实验》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实验二:字符设备驱动实验一、实验目的通过本实验的学习,了解Linux操作系统中的字符设备驱动程序结构,并能编写简单的字符设备的驱动程序以及对所编写的设备驱动程序进行测试,最终了解Linux操作系统如何管理字符设备。二、准备知识字符设备驱动程序主要包括初始化字符设备、字符设备的I/O调用和中断服务程序。在字符设备驱动程序的file_operations结构中,需要定义字符设备的基本入口点。Øopen()函数;Ørelease()函数Øread()函数Øwrite()函数Øioctl()函数Øselect()函数。另

2、外,注册字符设备驱动程序的函数为register_chrdev()。register_chrdev()原型如下:intregister_chrdev(unsignedintmajor,//主设备号constchar*name,//设备名称structfile_operations*ops);//指向设备操作函数指针其中major是设备驱动程序向系统申请的主设备号。如果major为0,则系统为该驱动程序动态分配一个空闲的主设备号。name是设备名称,ops是指向设备操作函数的指针。注销字符设备驱动程序的函数是unr

3、egister_chrdev(),原型如下:intunregister_chrdev(unsignedintmajor,constchar*name);字符设备注册后,必须在文件系统中为其创建一个设备文件。该设备文件可以在/dev目录中创建,每个设备文件代表一个具体的设备。使用mknod命令来创建设备文件。创建设备文件时需要使用设备的主设备号和从设备号作为参数。阅读教材相关章节知识,了解字符设备的驱动程序结构。三、实验内容根据教材提供的实例。编写一个简单的字符设备驱动程序。要求该字符设备包括open()、writ

4、e()、read()、ioctl()和release()五个基本操作,并编写一个测试程序来测试所编写的字符设备驱动程序。四、实验指导1、驱动程序编写后,编写一个Makefile文件来编译此驱动程序。Makefile格式如下:obj-m:=mydev.oall:make-C/lib/modules/$(shelluname-r)/buildM=$(shellpwd)modulesclean:make-C/lib/modules/$(shelluname-r)/buildM=$(shellpwd)clean2、使用#

5、insmod***.ko来安装此驱动程序。并通过#cat/proc/devices命令查看新加载设备的设备号。3、接下来需要创建设备文件,使用命令#mknod/dev/***c25404、最后运行测试文件来测试驱动程序。五、实验程序1、驱动程序memdev.c如下:staticmem_major=MEMDEV_MAJOR;module_param(mem_major,int,S_IRUGO);structmem_dev*mem_devp;/*设备结构体指针*/structcdevcdev;/*文件打开函数*/in

6、tmem_open(structinode*inode,structfile*filp){structmem_dev*dev;/*获取次设备号*/intnum=MINOR(inode->i_rdev);if(num>=MEMDEV_NR_DEVS)return-ENODEV;dev=&mem_devp[num];/*将设备描述结构指针赋值给文件私有数据指针*/filp->private_data=dev;return0;}/*文件释放函数*/intmem_release(structinode*inode,str

7、uctfile*filp){return0;}/*读函数*/staticssize_tmem_read(structfile*filp,char__user*buf,size_tsize,loff_t*ppos){unsignedlongp=*ppos;/*记录文件指针偏移位置*/unsignedintcount=size;/*记录需要读取的字节数*/intret=0;/*返回值*/structmem_dev*dev=filp->private_data;/*获得设备结构体指针*//*判断读位置是否有效*/if(

8、p>=MEMDEV_SIZE)/*要读取的偏移大于设备的内存空间*/return0;if(count>MEMDEV_SIZE-p)/*要读取的字节大于设备的内存空间*/count=MEMDEV_SIZE-p;/*读数据到用户空间:内核空间->用户空间交换数据*/if(copy_to_user(buf,(void*)(dev->data+p),count)){ret=-EF

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。