gpt4 book ai didi

c - 从内核空间声明一个指向用户空间数组的指针并填充它

转载 作者:太空宇宙 更新时间:2023-11-04 11:48:19 26 4
gpt4 key购买 nike

我正在用 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.

谢谢!

最佳答案

您不能只是编造一个(虚拟)地址并尝试复制到它。您必须在进程的地址空间中注册它。这就是 mmap() 函数从用户空间执行的操作。您需要从内核中执行等效操作。一旦你创建了一个可写的匿名内存块,你应该可以自由地从内核中复制进出它。

关于c - 从内核空间声明一个指向用户空间数组的指针并填充它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56902948/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com