【发布时间】:2014-10-30 18:43:38
【问题描述】:
我正在尝试为 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:
谢谢。
【问题讨论】:
-
buf是否声明为char或unsigned long long? -
buf的类型是什么?是否与memory_buffer相同?printf("Buffer: %x\n", buf);的结果是什么?