我可以在指定的物理地址分配内存页面的内核模块?

我写在来宾操作系统,将在虚拟机上使用KVM运行的内核模块。 在这里,我想在一个特定的物理地址allcoate一个内存页。 的kmalloc()给我存储器,但在由操作系统选择一个物理地址。

背景:我写在QEMU的设备仿真技术,当客户机上使用装置(它退出,例如,在I / O映射以及端口映射设备)进行通信,不会退出。 的基本思想如下:在旅客的设备驱动器将写入特定(位)的物理存储器地址。 在QEMU进程的线程将被轮询它不断地检查新数据(通过一些状态位等)。 并采取相应的行动,而不会造成出口。 因为不存在(现有)的方式通过该旅客可以告诉地址已经被使用的设备驱动器的主机,我想为它被分配一个预先指定的存储器页。

--------------解决方案-------------

你不能在一个特定的地址分配内存,但是,可以使用在启动时保留一定的物理地址reserve_bootmem() 调用reserve_bootmem()早期启动(当然,它需要一个修改过的内核)将确保保留的内存不会被传递到伙伴系统(即alloc_pages()更高层次的朋友- kmalloc()你会能够使用该存储器用于任何目的。

这听起来像你应该从另一个侧面攻击这一点,通过在该QEMU BIOS传递到来宾内核在启动内存映射预留的物理内存范围。

分类:linux内核 时间:2015-03-15 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.751 (s). 10 q(s)