我正在用C编写内核模块。我需要在用户空间中声明一个指向字符数组的指针,并用数据填充它。我使用char * __user声明了指针,并用调用copy_to_user函数的数据填充了它。然后,我调用copy_from_user函数来检查数据是否正确写入。我只读取零,而不是读取我期望的数据。
我想念什么?从内核空间向用户空间写入数据的正确方法是什么?
代码如下:
u16 address = 0xf0f0;
char __user *buf = address;
copy_to_user(buf, data_to_write, 20);
copy_from_user(data_to_read, buf, 20);
//printing data_to_read I read only zeroes.
谢谢!
答案 0 :(得分:0)
您不能只是组成一个(虚拟)地址并尝试复制到该地址。您必须在进程的地址空间中注册它。这是mmap()函数从用户空间执行的操作。您需要从内核内部执行等效操作。一旦创建了可写的匿名内存块,就应该可以自由地从内核中复制数据了。