内核及设备驱动实验报告

内核及设备驱动实验报告

ID:38613762

大小:103.00 KB

页数:7页

时间:2019-06-16

内核及设备驱动实验报告_第1页
内核及设备驱动实验报告_第2页
内核及设备驱动实验报告_第3页
内核及设备驱动实验报告_第4页
内核及设备驱动实验报告_第5页
资源描述:

《内核及设备驱动实验报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、内核及设备驱动实验报告一、实验目的1.学习Linux操作系统下内核程序的编写和应用。2.学习可编程接口芯片的编程控制方法。二、实验内容与要求1.完成一个内核模块的编写,实现内核模块的正确加载和卸载。2.建立一个虚拟的字符设备驱动程序,至少要包含读、写功能,为用户程序提供内核空间与用户空间的数据交换,方案及实现过程自定。3.在上面的基础上完成8253与自编的应用程序结合,实现特定的功能。三、实验记录与分析程序清单:1.驱动程序#include#include#

2、include#includeintinit_module(void);voidcleanup_module(void);staticintdevice_open(structinode*,structfile*);staticintdevice_release(structinode*,structfile*);staticssize_tdevice_read(structfile*,char*,size_t,loff_t*);staticssize_tdevice

3、_write(structfile*,constchar*,size_t,loff_t*);#defineSUCCESS0#defineDEVICE_NAME"chardev"#defineBUF_LEN80staticintMajor;staticintDevice_Open=0;staticcharmsg[BUF_LEN];staticchar*msg_Ptr;staticstructfile_operationsfops={.read=device_read,.write=device_write,.open=de

4、vice_open,.release=device_release};intinit_module(void){Major=register_chrdev(0,DEVICE_NAME,&fops);if(Major<0){printk("Registeringthecharacterdevicefailedwith%d",Major);returnMajor;}printk("<1>Iwasassignedmajornumber%d.Totalkto",Major);printk("<1>thedriver,cr

5、eateadevfilewith");printk("'mknod/dev/helloc%d0'.",Major);printk("<1>Tryvariousminornumbers.Trytocatandechoto");printk("thedevicefile.");printk("<1>Removethedevicefileandmodulewhendone.");return0;}voidcleanup_module(void){intret=unregister_chrdev(Major,

6、DEVICE_NAME);if(ret<0)printk("Errorinunregister_chrdev:%d",ret);}staticintdevice_open(structinode*inode,structfile*file){staticintcounter=0;if(Device_Open)return-EBUSY;printk("majorandminordevicenumber=%x",inode->i_rdev);printk("Majornumber=%d",MAJOR(inode-

7、>i_rdev));Device_Open++;sprintf(msg,"Ihavealreadytoldyou%dtimesHelloworld!",counter++);msg_Ptr=msg;returnSUCCESS;}staticintdevice_release(structinode*inode,structfile*file){Device_Open--;return0;}staticssize_tdevice_read(structfile*filp,char*buffer,size_tlength

8、,loff_t*offset){intbytes_read=0;if(*msg_Ptr==0)return0;while(length&&*msg_Ptr){put_user(*(msg_Ptr++),buffer++);length--;bytes_read++;}returnbytes_read;}statics

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

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

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