繁体   English   中英

Linux内核模块copy_to_user无法正常工作

[英]Linux kernel module copy_to_user not working

我打算为Raspberry Pi编写一个Linux内核模块。 一切都很好,但是当我尝试使用copy_to_user或put_user时,如果我将其打印为llu,并且始终将其打印为字符,则始终返回值“ 34336”。

有趣的是,它正在运行,我进行了一些更改,它停止了工作,我恢复为工作版本,并且不再起作用。

来自模块的代码:

    ssize_t st_read(struct file *filp, char *buf, size_t count, loff_t *f_pos)
    {
            char memory_buffer = 'b';
            /* Transferring data to user space */
            copy_to_user(buf,memory_buffer,1);

            /* Changing reading position as best suits */
            if (*f_pos == 0) {
                    *f_pos+=1;
                    return 1;
            } else {
                    return 0;
            }
    }

代码读取值:

    fd = open("/dev/systimer", O_RDONLY);

    // check for errors
    if(fd < 0) {
            perror("open(O_RDONLY)");
            return errno;
    } else
            close(fd);

    read(fd, &buf, 1);
    printf("Buffer: %llu\n", buf);
    printf("Buffer2: %c\n", buf);

输出为:

    Buffer: 34336
    Buffer2:

谢谢。

您已关闭阅读之前。 您应该始终检查read()的返回值

// check for errors
if(fd < 0) {
        perror("open(O_RDONLY)");
        return errno; 
} else
        close(fd);   // <-- you are closing the fd here

read(fd, &buf, 1);   // <-- fd is closed

你有没有尝试过?

copy_to_user(buf, &memory_buffer, 1);

您可以尝试以下代码,而不是copy_to_user

 sprintf(buf, "%u\n", memory_buffer);

-法尼

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM