qemu-system-aarch64 virt添加sdhci

static void create_sdhci(const VirtMachineState *vms, MemoryRegion *mem)

{

    MachineState *ms = MACHINE(vms);

    SysBusDevice *busdev;

    DeviceState *dev;

    DeviceState *carddev;

    BlockBackend *blk;

    DriveInfo *di;

    hwaddr base = vms->memmap[VIRT_SDHCI].base;

    hwaddr size = vms->memmap[VIRT_SDHCI].size;

    int irq = vms->irqmap[VIRT_SDHCI];

    char *nodename;

    const char compat[] = "arasan,sdhci-8.9a";

    /* Compatible with:

        * - SD Host Controller Specification Version 2.0

        * - SDIO Specification Version 2.0

        * - MMC Specification Version 4.3

        * - SDMA

        * - ADMA2

        *

        * As this part of the Exynos4210 is not publically available,

        * we used the "HS-MMC Controller S3C2416X RISC Microprocessor"

        * public datasheet which is very similar (implementing

        * MMC Specification Version 4.0 being the only difference noted)

        */

    dev = qdev_new(TYPE_S3C_SDHCI);

    qdev_prop_set_uint64(dev, "capareg", 0x05E80080);

    busdev = SYS_BUS_DEVICE(dev);

    sysbus_realize_and_unref(busdev, &error_fatal);

    //sysbus_mmio_map(busdev, 0, EXYNOS4210_SDHCI_ADDR(n));

     memory_region_add_subregion(mem, base,

                                sysbus_mmio_get_region(busdev, 0));

    //sysbus_connect_irq(busdev, 0, s->irq_table[exynos4210_get_irq(29, n)]);

    sysbus_connect_irq(busdev, 0, qdev_get_gpio_in(vms->gic, irq));

    di = drive_get(IF_SD, 0, 0);

    blk = di ? blk_by_legacy_dinfo(di) : NULL;

    carddev = qdev_new(TYPE_SD_CARD);

    qdev_prop_set_drive(carddev, "drive", blk);

    qdev_realize_and_unref(carddev, qdev_get_child_bus(dev, "sd-bus"),

                            &error_fatal);

    nodename = g_strdup_printf("/sdhci@%" PRIx64, base);

    qemu_fdt_add_subnode(ms->fdt, nodename);

    /* Note that we can't use setprop_string because of the embedded NUL */

    qemu_fdt_setprop(ms->fdt, nodename, "compatible",

                         compat, sizeof(compat));

    qemu_fdt_setprop_sized_cells(ms->fdt, nodename, "reg",

                                     2, base, 2, size);

    qemu_fdt_setprop_cells(ms->fdt, nodename, "interrupts",

                               GIC_FDT_IRQ_TYPE_SPI, irq,

                               GIC_FDT_IRQ_FLAGS_LEVEL_HI);

    return;

}

static const int a15irqmap[] = {

    [VIRT_UART] = 1,

……    

    [VIRT_SDHCI] = 11,

……

};

static const MemMapEntry base_memmap[] = {

    /* Space up to 0x8000000 is reserved for a boot ROM */

    [VIRT_FLASH] =              {          0, 0x08000000 },

……

    [VIRT_SDHCI] =              { 0x0b010000, 0x00010000 },

……

};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
qemu-system-aarch64一个运行ARM64架构的虚拟机的命令行工具。当我们在运行这个命令时,如果没有指定虚拟机类型,也没有默认设置,就会出现 "qemu-system-aarch64: no machine specified, and there is no default" 的报错信息。 这个报错的原因是因为在运行qemu-system-aarch64命令时,我们需要指定要运行的虚拟机的类型。虚拟机类型是根据具体的应用或需求来选择的,例如rpi3表示树莓派3型号的虚拟机,virt表示通用的虚拟机类型等等。如果没有指定虚拟机类型,qemu无法确定具体要运行哪个虚拟机,因此会出现这个错误。 解决这个问题的方法是在运行qemu-system-aarch64命令时,使用"-machine"参数来指定要运行的虚拟机类型。例如,如果我们想运行rpi3类型的虚拟机,命令可以修改为: "qemu-system-aarch64 -machine rpi3"。同时,也可以通过"-M"参数来指定虚拟机类型,例如: "qemu-system-aarch64 -M rpi3"。 此外,这个报错信息也提示我们当前没有默认设置的虚拟机类型。要设置默认虚拟机类型,可以使用"-machine"或"-M"参数,加上要设置的虚拟机类型,例如: "qemu-system-aarch64 -machine virt"。这样,当我们运行qemu-system-aarch64命令时,就默认使用指定的虚拟机类型。 综上所述,qemu-system-aarch64: no machine specified, and there is no default报错信息是因为运行qemu-system-aarch64命令时没有指定虚拟机类型,并且也没有默认设置。需要使用"-machine"或"-M"参数来指定当前要运行的虚拟机类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值