device driver fn is not being called when system call in userspace is called

雨燕双飞 提交于 2019-12-12 04:35:01

问题


i am re-writing a scull device driver. I have written the open/read/write fns in driver code. echo "hello" > /dev/myscull0 shows the data being written successfully to my device driver, and open() -> write() ->release() has been called in driver successfully.

Similarly, other operations using standard bash commands are successfull when operated on driver device file. Eg: cat /dev/myscull0 execute drivers read() call.

Now, i am writing a user space program to operate on my device file.

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__);

}

But i am seeing, drivers open() call is not being executed, confirmed from dmesg. I am running the program with sudo privileges, yet no succsess. I supply the input as /dev/myscull0

Infact, after executing the user program, i am seeing two entries in /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$

The first entry was created by me using mknod command, however second entry is created with strange set of permissions after executing the user program.

Output :

/dev/myscull0
scull_open() : Success

Can anyone pls help what wrong i am doing here ?

来源:https://stackoverflow.com/questions/42481886/device-driver-fn-is-not-being-called-when-system-call-in-userspace-is-called

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!