打开char dev文件时发生ioctl错误
问题描述:
我正在写一个驱动程序代码,以从x86读取一些寄存器值,当我运行我的用户空间应用程序时,出现以下错误。打开char dev文件时发生ioctl错误
IOCTL:用于设备
这里是代码嗅不适当的ioctl ..
fd = open_drvfile();
if(ioctl(fd, IOCTL_MSR_CMDS, (long long)msr_start) == -1) {
perror("ioctl:");
exit (0);
}
和open_drvfile()刚刚打开(创建和打开)字符文件如下
fd = open("/dev/" DEV_NAME, O_RDWR|O_CREAT);
if (fd == -1) {
perror("Failed to open /dev/" DEV_NAME);
}
return fd;
可以有一个点,我犯了这个错误?
答
一个字符设备意味着它应mknod()
被创建,而不是与open()
下O_CREAT
flags
(这将创建一个普通的文件,而不是一个字符设备)。
(见问题评论)。
我不太明白你要做什么,但是因为你在问题标题中引用了一个char设备,所以open()下面的O_CREAT标志对我来说没有什么意义。你在'open()'之前用'mknod()'创建了char设备吗? – pah
我正在使用open()创建并打开文件(因为文件不存在)。我认为这是错误的。在看到您的答案后,我使用mknod()创建文件并删除了O_CREAT,现在它按预期工作。谢谢。 –
我会发布答案,所以它可能会对其他人有所帮助:) – pah