[英]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.