Linux设备驱动程序举例

Linux设备驱动程序举例

ID:41561167

大小:64.86 KB

页数:6页

时间:2019-08-27

Linux设备驱动程序举例_第1页
Linux设备驱动程序举例_第2页
Linux设备驱动程序举例_第3页
Linux设备驱动程序举例_第4页
Linux设备驱动程序举例_第5页
资源描述:

《Linux设备驱动程序举例》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Linux设备驱动程序设计实例2007-03-0323:09Linux系统屮,设备驱动程序是操作系统内核的重要组成部分,在与硬件设备之间建立了标准的抽象接口。通过这个接口,用户可以像处理普通文件一样,对硬件设备进彳亍打开(open)、关闭(close)、读写(read/write)等操作。通过分析和设计设备驱动程序,可以深入理解Linux系统和进行系统开发。木文通过-•个简单的例子來说明设备驱动程序的设计。1、程序清单2000年2刀7日编写〃按内核模块编译〃设备駆动程序模块编译//MyDev.c#ifndef_KERNEL_#define_KERNEL_#endif#ifndefMODULE#

2、defineMODULE#endif#defineDEVICE.NAMEnMyDevu#defineOPENSPK1#defineCLOSESPK2〃必要的头文件#include〃同kernel.h,最基木的内核模块头文件#include〃同module.h,最基本的内核模块头文件#include〃这里包含了进行止确性检查的宏#include〃文件系统所必需的头文件#include〃这里包含了内核空间与用户空间进行数据交换时的函数宏#include

3、//I/O访问intmy_major=0;〃主设备号staticintDevice_Open=0;staticcharMessage[]="Thisisfromdevicedriver";char*Message_Ptr;intmy_open(structinode*inode,structfile*file){〃每g应用程序用open打开设备时,此函数被调用printk("device_open(%p,%p)H,inode,file);讦(Device_Open)return-EBUSY;〃同吋只能由一个应用程序打开Device_Open++;MOD_INC_US

4、E_COUNT;〃设备打开期间禁止卸载return0;}staticvoidmy_release(structinode*inode,structfile*file){//每当应用程序用close关闭设备时,此函数被调用printk(Hdevice_release(%p,%p)tinode,file);Device_Open—;MOD_DEC_USE_COUNT;〃引用计数减1}ssize_tmy_read(structfile*f,char*buf,intsize,loff_toff){〃每当应用丑序用wad访问设备吋,此函数被调用intbytes_read=O;#ifdefDEB

5、UGprintk("my」eadiscalled.Userbufferis%p,sizeis%d",buf,size);#endifif(verify_area(VERIFY_WRITE,buf,size)==-EFAULT)return-EFAULT;Message_Ptr=Message;while(size&&*Message_Ptr){if(put_user(*(Message_Ptr++),buf+4-))〃写数据到用户空间return-EINVAL;size—;bytes_read++;}returnbytes_read;}ssize_tmy_write(structfil

6、e*f,constchar*buf,intsize,loffLtoff){〃每台应甬程序用write访问设备时,此函数被调用inti;unsignedcharuc;#ifdefDEBUGprintk("my_writeiscalled.Userbufferis%p,sizeis%dn,buf,size);#endifif(verify_area(VERIFY_WRITE,buf,size)==-EFAULT)return-EFAULT;printk(HDatabelowisfromuserprogram:H);for(i=O;ivsize;i++)if(!get_user(uc

7、,buf++))//从用户空间读数据printk(H%02x”,uc);returnsize;}intmy_ioctl(structinode*inod,structfileunsignedintargl,unsignedintarg2){〃每当应用程序用ioctl访问设备吋,此函数被调用#ifdefDEBUGprintk(Hmy_ioctliscalled・Parameteris%p,siz

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

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

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