Я пишу модуль ядра в гостевой операционной системе, которая будет работать на виртуальной машине с использованием KVM. Здесь я хочу разместить страницу памяти по определенному физическому адресу. kmalloc () дает мне память, но по физическому адресу, выбранному ОС.
Справочная информация: я пишу технику эмуляции устройства в qemu, которая не будет выходить при взаимодействии гостя с устройством (например, при выходе из устройств ввода-вывода и устройств с отображением портов). Основная идея заключается в следующем: драйвер гостевого устройства будет записывать на определенный (гостевой) адрес физической памяти. Поток в процессе qemu будет непрерывно опрашивать его для проверки новых данных (через некоторые биты состояния и т. Д.). И будет действовать соответственно, не вызывая выхода. Поскольку нет (существующего) способа, с помощью которого гость может сообщить хосту, какой адрес используется драйвером устройства, я хочу, чтобы для него была выделена заранее определенная страница памяти.