sysbus_create_simple関数は、sysbus.h内で次のように定義されています。
67 static inline DeviceState *sysbus_create_simple(const char *name, 68 target_phys_addr_t addr, 69 qemu_irq irq) 70 { 71 return sysbus_create_varargs(name, addr, irq, NULL); 72 }
また、sysbus_create_varargs関数は、sysbus.c内で次のように定義されています。
135 DeviceState *sysbus_create_varargs(const char *name,
136 target_phys_addr_t addr, ...)
137 {
138 DeviceState *dev;
139 SysBusDevice *s;
140 va_list va;
141 qemu_irq irq;
142 int n;
143
144 dev = qdev_create(NULL, name);
145 s = sysbus_from_qdev(dev);
146 qdev_init_nofail(dev);
147 if (addr != (target_phys_addr_t)-1) {
148 sysbus_mmio_map(s, 0, addr);
149 }
150 va_start(va, addr);
151 n = 0;
152 while (1) {
153 irq = va_arg(va, qemu_irq);
154 if (!irq) {
155 break;
156 }
157 sysbus_connect_irq(s, n, irq);
158 n++;
159 }
160 va_end(va);
161 return dev;
162 }
sysbus_create_varargs関数内で、
dev = qdev_create(NULL, name);
s = sysbus_from_qdev(dev);
qdev_init_nofail(dev);
sysbus_mmio_map(s, 0, addr);
sysbus_connect_irq(s, n, irq);
を呼んでいます。これはZynqのqemu (その4)、Zynqのqemu (その6)で見てきたものです。検証、Verification、FPGA