Добавить запоминающее устройство в QEMU - PullRequest
1 голос
/ 10 июля 2020

Я хочу расширить текущую реализацию QEMU с помощью специального устройства DRAM, которое имеет контроллер памяти и более подробное физическое представление (строки / банки).

Идея состоит в том, чтобы каждый доступ к памяти к область памяти, обрабатываемая этим устройством, должна проходить через контроллер. Кроме того, пользовательское приложение также должно иметь возможность взаимодействовать с устройством через загружаемый модуль ядра для отправки настраиваемых команд на само устройство.

Например:

int *array = malloc(100 * sizeof(int));    
// somehow map to the device memory area (easier if it's the only dram device)

array[10] = 1;                            
// goes to the device controller that sets the value internally

device_set_value(array, 2, 1); 
// performs array[2] = 1 but by passing through the kernel module that writes 
// this command to the driver MMIO.

Я начал с поиска в edu.c в https://github.com/qemu/qemu/blob/v2.7.0/hw/misc/edu.c и предлагаемом здесь примере модуля ядра

https://github.com/cirosantilli/linux-kernel-module-cheat/blob/6788a577c394a2fc512d8f3df0806d84dc09f355/kernel_module/pci.c

Но я не думаю, что таким образом доступ к процессору в QEMU будет проходить через драйвер. Драйвер реагирует только на значения, записанные в регистры MMIO.

Одним из способов может быть отправка настраиваемой команды для каждой операции на устройство, но это приведет к отмене всех C операторов, таких как разыменование указателя.

Кроме того, как модуль может переводить виртуальные адреса пользователей в физические? Потому что, если он должен выполнить DMA для доступа к фактической памяти (как это делается в устройстве edu), ему нужен физический адрес. Я видел, что это можно сделать с помощью вызова mmap (), реализованного как file_operation в загружаемом модуле ядра, но я не смог найти пример в Интернете.

Заранее спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...