打开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; 

可以有一个点,我犯了这个错误?

+0

我不太明白你要做什么,但是因为你在问题标题中引用了一个char设备,所以open()下面的O_CREAT标志对我来说没有什么意义。你在'open()'之前用'mknod()'创建了char设备吗? – pah

+1

我正在使用open()创建并打开文件(因为文件不存在)。我认为这是错误的。在看到您的答案后,我使用mknod()创建文件并删除了O_CREAT,现在它按预期工作。谢谢。 –

+0

我会发布答案,所以它可能会对其他人有所帮助:) – pah

一个字符设备意味着它应mknod()被创建,而不是与open()O_CREATflags(这将创建一个普通的文件,而不是一个字符设备)。

(见问题评论)。