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