Документация неясна или отсутствует относительно того, как это должно быть выполнено, но я все же нашел решение, которое работало тем временем.
В каталоге, где хранится исходный файл (здесь, qemu / hw / misc /), есть файл Makefile.objs со списком целевых файлов объектных файлов, которые необходимо создать. Добавление следующей строки побудит основной Makefile (в корневом каталоге QEMU) создать цель, когда определен флаг конфигурации CONFIG_HELLO:
common-obj-$(CONFIG_HELLO) += hello-world-device.o
Чтобы определить этот пользовательский флаг, запись может быть добавлена к целевой архитектуре по выбору. Здесь я добавляю его в свою конфигурацию для x86_64 в qemu / default-configs / x86_64-softmmu.mak:
CONFIG_HELLO=y
После внесения вышеуказанных изменений, запуск make создает правило для создания пользовательского устройства и запускает его в подходящее время при построении архитектуры. Это выявило ошибку включения в существующем коде, повторяемую здесь с поправками для удобства:
#include "qemu/osdeps.h"
#include "hw/hw.h"
#define TYPE_HELLO "hello-world-device"
#define HELLO(obj) OBJECT_CHECK(HelloState, (obj), TYPE_HELLO)
typedef struct{
DeviceClass parent_obj;
uint8_t member0, member1;
} HelloState;
static const TypeInfo hello_info = {
.name = TYPE_HELLO,
.parent = TYPE_DEVICE,
.instance_size = sizeof(HelloState),
.class_init = class_init,
};
static void class_init(ObjectClass *klass, void *data){
DeviceClass *dc = DEVICE_CLASS(klass);
}
static void hello_register_types(void){
type_register_static(&hello_info);
}
type_init(hello_register_types)