当前位置:  技术问答>linux和unix

一个很常见的设备驱动程序例子不知道哪里有错,怎么编译,请大家帮忙阿,谢谢!!!

    来源: 互联网  发布时间:2015-12-05

    本文导语:  //            MyDev.c           2000年2月7日编写 #ifndef __KERNEL__ #  define __KERNEL__    //按内核模块编译 #endif #ifndef MODULE #  define MODULE                //设备驱动程序模块编译 #endif #define DEVICE_NAM...

//            MyDev.c           2000年2月7日编写
#ifndef __KERNEL__
#  define __KERNEL__    //按内核模块编译
#endif
#ifndef MODULE
#  define MODULE                //设备驱动程序模块编译
#endif
#define DEVICE_NAME "MyDev"     
#define OPENSPK 1
#define CLOSESPK 2
//必要的头文件
#include         //同kernel.h,最基本的内核模块头文件
#include   //同module.h,最基本的内核模块头文件
#include   //这里包含了进行正确性检查的宏
#include      //文件系统所必需的头文件
#include   //这里包含了内核空间与用户空间进行数据交换时的
函数宏
#include       //I/O访问
int my_major=0;                 //主设备号
static int Device_Open=0;
static char Message[]="This is from device driver";
char *Message_Ptr;
int my_open(struct inode *inode, struct file *file)
{//每当应用程序用open打开设备时,此函数被调用
  printk ("ndevice_open(%p,%p)n", inode, file);
  if (Device_Open)
    return -EBUSY;      //同时只能由一个应用程序打开
  Device_Open++;
  MOD_INC_USE_COUNT;    //设备打开期间禁止卸载
  return 0;
}
static void  my_release(struct inode *inode, struct file *file)
{//每当应用程序用close关闭设备时,此函数被调用
  printk ("ndevice_release(%p,%p)n", inode, file);
  Device_Open --;
  MOD_DEC_USE_COUNT;    //引用计数减1
}
ssize_t  my_read (struct file *f,char *buf,int size,loff_t off)
{//每当应用程序用read访问设备时,此函数被调用
    int bytes_read=0;       
#ifdef DEBUG
    printk("nmy_read is called. User buffer is %p,size is %dn",buf,size);
#endif
if (verify_area(VERIFY_WRITE,buf,size)==-EFAULT) 
    return -EFAULT;
        Message_Ptr=Message;
        while(size && *Message_Ptr)
        {       
                if(put_user(*(Message_Ptr++),buf++))    //写数据到用户空间
                       return -EINVAL;
                size --;
                bytes_read++;
        }
        return bytes_read; 
}
ssize_t my_write (struct file *f,const char *buf, int size,loff_t off)
{//每当应用程序用write访问设备时,此函数被调用
    int i;
        unsigned char uc;
#ifdef DEBUG
    printk("nmy_write is called. User buffer is %p,size is %dn",buf,size);
#endif
if (verify_area(VERIFY_WRITE,buf,size)==-EFAULT) 
return -EFAULT;
        printk("nData below is from user program:n");
        for (i=0;i

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux下nm命令(显示可执行文件的符号信息)介绍以及常见nm命令用法举例
  • 常见问题常见问题 搜索搜索 团队团队 个人资料个人资料 您没有新的站内信件您没有新的站内信件 注销 [ tnt_bomb ]注销 [ tnt_b
  • 安装hadoop时出现内存不够及其它一些常见的hadoop错误解决办法
  • 请问Linux下面有哪些常见的文件后缀名呢?
  • linux/centos安装nginx常见错误及解决办法
  • CSS中几种常见的注释
  • c++模板(template)常见用法代码实例
  • 字符不会撑大表格的常见css样式
  • mysql jdbc连接mysql数据库步骤及常见参数详解
  • 一个很常见的关于时间的问题。马上结帐!
  • 有一常见问题不解,请大家聊聊!
  • 一个常见的命令行问题
  • 问一个gdb的常见问题
  • mysql常见错误集锦
  • 几种常见攻击的正则表达式
  • UNIX 常见问题
  • 最常见的问题:哪里有Oracle7.3 for sco5.0.5的下载?
  • ./congfigure的时候出错了,很常见的错误..怎么解啊..
  • 强烈要求本版斑竹向CSDN总斑竹申请分版。并把分版的意见放在版顶。并且整理出常见问题的F&Q。
  • web标准常见问题集合第1/2页
  • 为什么常见的bbs用户的登陆名必须为英文,而不用中文?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3