打开char dev文件时发生ioctl错误
我正在编写一个驱动程序代码,从x86读取一些寄存器值。当我运行我的用户空间应用程序时,我得到以下错误 ioctl:设备的ioctl不正确 这是代码嗅探打开char dev文件时发生ioctl错误,c,linux,ioctl,C,Linux,Ioctl,我正在编写一个驱动程序代码,从x86读取一些寄存器值。当我运行我的用户空间应用程序时,我得到以下错误 ioctl:设备的ioctl不正确 这是代码嗅探 fd = open_drvfile(); if(ioctl(fd, IOCTL_MSR_CMDS, (long long)msr_start) == -1 ) { perror("ioctl:"); exit (0); } 然后打开_drvfile(),只需打开(创建并打开)char文件,如下所示 fd = open("/dev
fd = open_drvfile();
if(ioctl(fd, IOCTL_MSR_CMDS, (long long)msr_start) == -1 ) {
perror("ioctl:");
exit (0);
}
然后打开_drvfile(),只需打开(创建并打开)char文件,如下所示
fd = open("/dev/" DEV_NAME, O_RDWR|O_CREAT);
if (fd == -1) {
perror("Failed to open /dev/" DEV_NAME);
}
return fd;
有一点我犯了错误吗?字符设备意味着它应该使用
mknod()
创建,而不是使用open()
标志下的O_create
(这将创建一个常规文件,而不是字符设备)
(参见问题注释)。字符设备意味着它应该使用mknod()
创建,而不是使用open()
标志下的O撸u create
(这将创建一个常规文件,而不是字符设备)
(请参阅问题注释)。我不太明白您想做什么,但由于您在问题标题中引用了一个字符设备,因此open()下的O_CREAT标志对我来说没有多大意义。您是否在open()
之前使用mknod()
创建了char设备?我正在使用open()创建并打开文件(因为文件还不存在)。我认为这是错误的。在看到您的答案后,我使用mknod()创建了文件并删除了O_CREAT,现在它可以正常工作了。谢谢。我会把答案贴出来,这样对其他人可能会有帮助:)@pah接受这个答案对我来说是新鲜事。。我只是那样做了。谢谢我不太明白你想做什么,但是因为你在问题标题中引用了一个char设备,open()下的O_create标志对我来说没有多大意义。您是否在open()
之前使用mknod()
创建了char设备?我正在使用open()创建并打开文件(因为文件还不存在)。我认为这是错误的。在看到您的答案后,我使用mknod()创建了文件并删除了O_CREAT,现在它可以正常工作了。谢谢。我会把答案贴出来,这样对其他人可能会有帮助:)@pah接受这个答案对我来说是新鲜事。。我只是那样做了。谢谢