gpt4 book ai didi

c - 在 Linux 设备驱动程序中使用 do_mmap()

转载 作者:IT王子 更新时间:2023-10-29 00:43:03 27 4
gpt4 key购买 nike

我们现在工作的设备需要有一个用户空间虚拟内存地址,我们尝试使用 do_mmap() 如下:

*uvaddr = (void *)do_mmap(0, 0, size, PROT_READ|PROT_WRITE, MAP_ANONYMOUS, 0);

但是我们得到了以下错误

Unable to handle kernel paging request for data at ad8

可以在设备驱动程序中使用“do_mmap()”吗?如果没有,有什么正确的方法吗?

最佳答案

有可能 do_mmap 成功了,但是 uvaddr 没有指向存储结果的有效位置。要确定这一点,请执行以下操作:

void *mmap_result;
printk(KERN_DEBUG "uvaddr = %p", uvaddr);
mmap_result = (void *)do_mmap(0, 0, size, PROT_READ|PROT_WRITE, MAP_ANONYMOUS, 0);
printk(KERN_DEBUG "mmap_result = %p", mmap_result);
*uvaddr = mmap_result;

这应该可以肯定地告诉您哪个失败了:对 do_mmap 的调用或对 *uvaddr 的赋值。

关于c - 在 Linux 设备驱动程序中使用 do_mmap(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5310139/

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