C 如何在路径:/dev/targetdev处打开设备文件?
我有一个关于在linux内核中编写模块的家庭作业。我已经为字符驱动程序声明了2个函数(打开和读取)。我可以用“sudo cat”命令正常运行。 但当我使用user_test.c文件测试这个模块时,它不起作用。无法在“/dev/targetdev”处打开设备文件。(在我的例子中,targetdev=“vchar_dev”)。 请帮我修一下。 谢谢C 如何在路径:/dev/targetdev处打开设备文件?,c,linux,linux-kernel,linux-device-driver,C,Linux,Linux Kernel,Linux Device Driver,我有一个关于在linux内核中编写模块的家庭作业。我已经为字符驱动程序声明了2个函数(打开和读取)。我可以用“sudo cat”命令正常运行。 但当我使用user_test.c文件测试这个模块时,它不起作用。无法在“/dev/targetdev”处打开设备文件。(在我的例子中,targetdev=“vchar_dev”)。 请帮我修一下。 谢谢 //模块文件中的代码 静态int vchar_驱动程序_打开(结构索引节点*索引节点,结构文件*翻转){ printk(“打开成功\n”); 返回0;
//模块文件中的代码
静态int vchar_驱动程序_打开(结构索引节点*索引节点,结构文件*翻转){
printk(“打开成功\n”);
返回0;
}
//user_test.c中的代码
#定义设备节点“/dev/vchar\u dev”
int open_chardev(){
int fd=打开(设备节点,O_RDWR);
如果(fd<0){
printf(“无法打开设备文件\n”);
出口(1);
}
返回fd;
}
O_RDWR
是否可以尝试只读?请显示更多代码,然后只显示两个小函数片段。如何检测它无法打开设备
?请具体说明。open
调用返回的fd
是否低于零?为什么你在打开/dev/vchar_dev
时提到/dev/targetdev
?O_RDWR
顾名思义就是O_读写
@LinhHa O_RDWR是读写的。使用O_rdonly您应该检查errno
(或使用perror
或strerror
)的值,了解有关open()
失败原因的更多信息。听起来可能很愚蠢,但您使用了“sudo cat”,这意味着您需要特定的权限才能访问此文件。您是否使用相同的用户/权限运行程序?您可能需要对文件进行一些访问权限调整,以允许普通用户打开它。