调用用户空间中的系统调用时,不调用设备驱动程序fn

时间:2017-02-27 09:19:58

标签: linux kernel driver device

我正在重写一个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

任何人都可以帮助我在这里做错了吗?

0 个答案:

没有答案