gpt4 book ai didi

c - Linux 内核模块 copy_to_user 不工作

转载 作者:行者123 更新时间:2023-11-30 18:15:52 25 4
gpt4 key购买 nike

我正在尝试为 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

关于c - Linux 内核模块 copy_to_user 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15890589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com