【发布时间】: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 接受答案对我来说是新的.. 我就是这么做的。谢谢