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

ioctl的实现

    来源: 互联网  发布时间:2016-06-22

    本文导语:  这是驱动中的ioctl函数,当系统以调用这个函数时,就立刻卡住了 然后键盘上数字键盘的指示灯灭掉,另外两个指示灯不停的闪,不知道是怎么回事? #define MEM_CLEAR 0 #define MEM_RE 1 #define MEM_SETSIZE 2 #define GLOBALMEM_S...

这是驱动中的ioctl函数,当系统以调用这个函数时,就立刻卡住了 然后键盘上数字键盘的指示灯灭掉,另外两个指示灯不停的闪,不知道是怎么回事?

#define MEM_CLEAR 0
#define MEM_RE 1
#define MEM_SETSIZE 2

#define GLOBALMEM_SIZE 0x1000
#define GLOBALMEM_MAJOR 255

struct globalmem_dev
{
unsigned int count;
unsigned int size;
struct cdev cd;
unsigned char mem[GLOBALMEM_SIZE];
};
struct globalmem_dev *g_dev;

int globalmem_ioctl(struct inode *inodep,
  struct file *filp,unsigned int cmd,unsigned long arg)
{
  int i;
  char c;
  switch(cmd)
  {
    case MEM_CLEAR:
      memset(g_dev->mem,0,g_dev->count);
      printk(KERN_INFO "globalmem is set to zeron");
      break;
    case MEM_RE:
      if(g_dev->count!=1)
        return -1;
      for(i=0;isize/2;i++){
        c=g_dev->mem[i];
        g_dev->mem[i]=g_dev->mem[g_dev->size-i-1];
        g_dev->mem[g_dev->size-i-1]=c;
      }
      break;
    case MEM_SETSIZE:
      if(argGLOBALMEM_SIZE)
        break;
      g_dev->size=arg;
      break;
    default:
      return -1;
  }
  return 0;
}

|
这个楼主可以进一步的调试嘛!
首先打印出cmd的值,看看到底是MEM_SETSIZE,MEM_RE,MEM_CLEAR中的哪个?

在这就是check g_dev这个结构里面的值,特别mem,哪里分配来的,如果没有初始化,嘿嘿。

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












  • 相关文章推荐
  • 内核执行ioctl时会被其他的ioctl打断吗
  • win内核驱动漏洞挖掘 IOCTL Fuzzer
  • ioctl调用的问题
  • 菜鸟问题:Linux下 ioctl 函数到底在哪?
  • 求助:ioctl函数的命令参数
  • system()调用 与 ioctl()调用
  • ioctl() 到底有什么作用??
  • ioctl()函数
  • ioctl執行的奇怪問題
  • 关于linux内核的ioctl函数,请高手指点一下
  • 请教一个关于Makefile的问题。提示出错:make: *** 没有规则可以创建“ioctl”需要的目标“gcc”。 停止。
  • ioctl&fcntl 函数的区别
  • 关于ioctl
  • 请教一个ioctl函数的参数问题
  • 给错误设备发送正确命令 -- ioctl问题
  • ioctl返回的地址问题?初学者,高人指点。
  • 【求助】:如何用ioctl()函数调用一个驱动程序
  • 用ioctl修改网卡接口eth0的ip地址的问题,请~
  • ioctl函数的用法
  • 求ioctl的中文资料


  • 站内导航:


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

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

    浙ICP备11055608号-3