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:
ありがとう。