首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IOCTL写崩溃

IOCTL写崩溃
EN

Stack Overflow用户
提问于 2013-03-26 03:40:37
回答 1查看 1.7K关注 0票数 0

我试图在内核空间中实现ioctl,以便将一些日期写入寄存器,在cmd的ioctl中我会崩溃。

下面是我的代码:

内核端:

代码语言:javascript
复制
static struct file_operations fops = {
.compat_ioctl = device_ioctl
};

int device_ioctl(struct inode *inode, struct file *filep, 
                 unsigned int cmd, unsigned long arg)
{

    int len = 200;

    printk (KERN_INFO "In Device_ioctl !!\n");
    switch(cmd)
    {
    case IOCTL_WRITE_REG:
        write_ioctl((unsigned long *)arg);
        break;

    default:
        printk (KERN_INFO "default\n");
        return -ENOTTY;
    }
    printk (KERN_INFO "device_ioctl out\n");
    return len;
}

用户端

代码语言:javascript
复制
#define IOCTL_WRITE_REG _IOW(MAJOR_NUM, 1, int *)
void write_to_device(int write_fd)
{

    int retval;
    unsigned int to_write1 = 1;

    retval = ioctl(write_fd, IOCTL_WRITE_REG, &to_write1);
    if(retval < 0)
    {
        printf("fd: %d, write error: %d\n", write_fd, errno);
        exit(-1);
    }
}

它没有进入device_ioctl函数,我哪里出错了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-26 04:34:28

有几件事我碰巧注意到:

  • 您需要使用unlocked_ioctl而不是compat_ioctlcompat_ioctl允许32位用户空间程序在64位内核上调用ioctl调用.
  • ioctl处理程序函数的签名不正确(对于unlocked_ioctl)。预期的签名是: long (*unlocked_ioctl) (struct * filep,unsigned,unsigned );

我还没有真正地编译这段代码,但我认为这应该是可行的:

代码语言:javascript
复制
static struct file_operations fops = {
    .unlocked_ioctl = device_ioctl
};

long device_ioctl(struct file *filep, 
                  unsigned int cmd,
                  unsigned long arg)
{

    int len = 200;

    printk (KERN_INFO "In Device_ioctl !!\n");
    switch(cmd)
    {
    case IOCTL_WRITE_REG:
        write_ioctl((unsigned long *)arg);
        break;

    default:
        printk (KERN_INFO "default\n");
        return -ENOTTY;
    }
    printk (KERN_INFO "device_ioctl out\n");
    return len;
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15628996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档