c - 从内核空间声明一个指向用户空间数组的指针并填充它
问题描述
我正在用 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() 函数在用户空间中所做的事情。您需要在内核中执行等效操作。一旦你创建了一个可写的、匿名的内存块,你应该可以自由地从内核中复制进出它。
推荐阅读
- sql - 雪花中的多轴问题
- python - 如何从列表中获取确切值?
- sql-server - 公用表表达式中的意外分析函数输出
- python - 错误的请求 | 不和谐 api v8
- delphi - Delphi TImage 加载 GIF 质量差
- python - 访问数组项,它们是循环中 dict 中的值
- javascript - 将另一个页面加载到 DIV 并每 5 秒刷新一次
- assembly - 我正在尝试打印从用户那里获取的三个数字的总和和平均值。程序运行不正常
- jhipster - 使用 Jhipster 创建实体的问题
- pyqt5 - QFileSystemModel 的图标功能在 Windows 上的 PyQt6 中是否损坏?