0

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:

ありがとう。

4

3 に答える 3

-2

copy_to_user の代わりに以下のコードを試すことができます

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

-パニ

于 2014-10-30T10:31:33.433 に答える