gpt4 book ai didi

linux-kernel - 我可以在内核模块中的指定物理地址分配内存页吗?

转载 作者:行者123 更新时间:2023-12-05 00:36:26 30 4
gpt4 key购买 nike

我正在客户操作系统中编写一个内核模块,它将在使用 KVM 的虚拟机上运行。在这里,我想在特定的物理地址处分配一个内存页。 kmalloc() 给了我内存,但在操作系统选择的物理地址上。

背景:我正在 qemu 中编写一种设备仿真技术,当 guest 与设备通信时它不会退出(例如,它在 I/O 映射设备和端口映射设备中退出)。基本思想如下:客户设备驱动程序将写入特定的(客户)物理内存地址。 qemu 进程中的一个线程将不断地轮询它以检查新数据(通过一些状态位等)。并且会采取相应的行动而不会导致退出。由于没有(现有的)方法可以让客户告诉主机设备驱动程序正在使用什么地址,我希望为其分配一个预先指定的内存页面。

最佳答案

您不能在特定地址分配内存,但是,您可以在启动时使用 reserve_bootmem() 保留某些物理地址。 .调用reserve_bootmem()启动早期(当然,它需要修改内核)将确保保留的内存不会传递给伙伴系统(即 alloc_pages() 和更高级别的 friend - kmalloc() ),您将能够使用出于任何目的的内存。

关于linux-kernel - 我可以在内核模块中的指定物理地址分配内存页吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8069128/

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