DEVICE() 包含在添加 SoC 时添加的外设信息。外设可通过 sysbus_mmio_map 访问 sysbus 上的特定地址。Sysbus_connect_irq 设置 IRQ(中断请求),以便特定外设可以接收 Sysbus 上的中断。为了让虚拟 ECU 中注册的设备与外界通信,必须在 stm32f405_soc_properties 中注册接口信息,因此通
uart设备在stm32f2xx_usart_init函数中通过sysbus_init_irq初始化一个GPIO_OUT sysbus_init_irq(SYS_BUS_DEVICE(obj), &s->irq); 这样第0个GPIO就指向了s->irq。 stm32f205_soc_realize会使用sysbus_connect_irq把设备的第0个GPIO和 nvic 的特定GPIO_IN进行关联。 实质上就是把s->irq = qdev_get_gpi...
cm_irq_init_in(DEVICE(obj),gpio_led_irq_handler,IRQ_GPIO_LED_IN,1); 1. 关联到qemu_irq是通过sysbus_connect_irq函数就是关联nvic到gpio。 // Route the ARM CPU_INTERRUPT_HARD to NVIC 0sysbus_connect_irq(SYS_BUS_DEVICE(cm_state->nvic),0,qdev_get_gpio_in(DEVICE(cm_state->cpu),ARM_C...
(dev, "model", pmc->mpic_version); qdev_prop_set_uint32(dev, "nb_cpus", smp_cpus); s = SYS_BUS_DEVICE(dev); sysbus_realize_and_unref(s, &error_fatal); k = 0; for (i = 0; i < smp_cpus; i++) { for (j = 0; j < OPENPIC_OUTPUT_NB; j++) { sysbus_connect_irq...
sc->irqmap[ASPEED_DEV_I2C]+i); /* * The AST2600 SoC has one IRQ per I2C bus. Skip the common * IRQ (AST2400 and AST2500) and connect all bussses. */ sysbus_connect_irq(SYS_BUS_DEVICE(&s->i2c),i+1,irq); /* The AST2600 I2C controller has one IRQ per bus. */ ...
void sysbus_connect_irq(SysBusDevice *dev, int n, qemu_irq irq) 把dev中的第n个gpio_out和irq关联 实际就是把irq保存为第n个gpio_out的值 1. 2. 3. 实例分析 比如在armv7m_nvic_realize调用qdev_init_gpio_in初始化num_irq个GPIO_IN
The sysbus_create_varargs function will sysbus_connect_irq() this irq with our EDC device qemu_irq out part. The GPIO connection code looks like :qdev_connect_gpio_out_named( DEVICE(dev), SYSBUS_DEVICE_GPIO_IRQ, 0, qdev_get_gpio_in_named(cpiom->intc, "ITN", INT_N_IT_EDC_ERR) ...
sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, pic[MP_ETH_IRQ]); sysbus_create_simple("mv88w8618_wlan", MP_WLAN_BASE, NULL); sysbus_create_simple(TYPE_MUSICPAL_MISC, MP_MISC_BASE, NULL); dev = sysbus_create_simple(TYPE_MUSICPAL_GPIO, MP_GPIO_BASE, ...
{ DeviceState *dev; SysBusDevice *s; qemu_check_nic_model(nd, TYPE_SKEL_ETH_DEV); dev = qdev_create(NULL, TYPE_SKEL_ETH_DEV); qdev_set_nic_properties(dev, nd); qdev_init_nofail(dev); s = SYS_BUS_DEVICE(dev); sysbus_mmio_map(s, 0, base); sysbus_connect_irq(s, 0, irq...
id=charconsole0 \-device sysbus-debugcon,iobase=0x402,chardev=debugcon -chardev file,path=/tmp/debug-log,id=debugcon \-monitor telnet:127.0.0.1:55555,server,nowait \-qmp unix:/run/virtcontainers/pods/wH9OFIZOLD5jtSs3PNht/monitor.sock,server,nowait \-device pcie-root-port,id=rp1,addr=...