我正在重写一个scull设备驱动程序。
我在驱动程序代码中编写了open / read / write fns。
echo "hello" > /dev/myscull0
显示成功写入我的设备驱动程序的数据,并打开() - >已成功在驱动程序中调用write() - > release()。
同样,在驱动程序设备文件上运行时,使用标准bash命令的其他操作也是成功的。例如:cat / dev / myscull0执行驱动程序read()调用。
现在,我正在编写一个用户空间程序来操作我的设备文件。
void
scull_open(){
char device_name[DEV_NAME_LENGTH];
int fd = 0;
memset(device_name, 0, DEV_NAME_LENGTH);
if((fgets(device_name, DEV_NAME_LENGTH -1, stdin) == NULL)){
printf("error in reading from stdin\n");
exit(EXIT_SUCCESS);
}
device_name[DEV_NAME_LENGTH -1] = '\0';
if ((fd = open(device_name, O_RDWR)) == -1) {
perror("open failed");
exit(EXIT_SUCCESS);
}
printf("%s() : Success\n", __FUNCTION__);
}
但是我看到,驱动程序open()调用没有被执行,从dmesg
确认。我正在运行具有sudo
权限的程序,但没有succsess。我提供的输入为/dev/myscull0
事实上,在执行用户程序后,我在/ dev dir中看到了两个条目
vm@vm:/dev$ ls -l | grep scull
crw-r--r-- 1 root root 247, 1 Feb 27 14:38 myscull0
---Sr-S--- 1 root root 0 Feb 27 14:38 myscull0
vm@vm:/dev$
第一个条目是由我使用mknod命令创建的,但是在执行用户程序后,第二个条目是使用奇怪的权限集创建的。
输出:
/dev/myscull0
scull_open() : Success
任何人都可以帮助我在这里做错了吗?