Vengineerの妄想(準備期間)

人生は短いけど、長いです。人生を楽しみましょう!

Zynqのqemu (その7)



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