【问题标题】:ioctl error when open char dev file打开char dev文件时出现ioctl错误
【发布时间】:2016-12-10 09:47:21
【问题描述】:

我正在编写一个驱动程序代码,从 x86 读取一些寄存器值。当我运行我的用户空间应用程序时,我得到了以下错误。

ioctl:设备的 ioctl 不合适

这里是代码嗅探..

fd = open_drvfile();
if(ioctl(fd, IOCTL_MSR_CMDS, (long long)msr_start) == -1 ) {
    perror("ioctl:");
    exit (0);
}

而 open_drvfile() 只需打开(创建并打开)char 文件,如下所示

fd = open("/dev/" DEV_NAME, O_RDWR|O_CREAT);
if (fd == -1) {
    perror("Failed to open /dev/" DEV_NAME);
}
return fd;

我在这方面犯了一些错误吗?

【问题讨论】:

  • 我不太明白您要做什么,但是由于您在问题标题中引用了 char 设备,因此 open() 下的 O_CREAT 标志没有多大意义对我来说。您是否在open() 之前使用mknod() 创建了字符设备?
  • 我正在使用 open() 创建和打开文件(因为文件不存在)。我认为这是错误的。看到您的回答后,我使用 mknod() 创建文件并删除了 O_CREAT ,现在它按预期工作。谢谢。
  • 我会发布答案,所以它可能对其他人有帮助:)
  • @pah 接受答案对我来说是新的.. 我就是这么做的。谢谢

标签: c linux ioctl


【解决方案1】:

字符设备意味着它应该使用mknod() 创建,而不是使用open() 下的O_CREAT flags(这将创建一个常规文件,而不是字符设备)。

(见问题 cmets)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2019-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多