qemu - 如何获取qemu机器 "virt"的PERIPHBASE?

标签 qemu arm64 bare-metal

qemu-system-aarch64可以用来模拟aarch64,具体命令如下:

qemu-system-aarch64 -M virt -cpu cortex-a53 ...(other options)

我们可以使用-M virt,dumpdtb=DTBFILE来获取内部设备树blob。

我的问题是,我们如何获取虚拟机virtPERIPHBASE

我们可以使用 dtc 工具从设备树 blob 文件中执行此操作吗?

最佳答案

dtc 命令为:

dtc -I dtb -O dts virt.dtb > virt.dts

您要查找的节点应该是/intc:

intc {
    phandle = <0x8001>;
    reg = <0x0 0x8000000 0x0 0x10000 0x0 0x8010000 0x0 0x10000>;
    compatible = "arm,cortex-a15-gic";
    ranges;
    #size-cells = <0x2>;
    #address-cells = <0x2>;
    interrupt-controller;
    #interrupt-cells = <0x3>;

    v2m {
        phandle = <0x8002>;
        reg = <0x0 0x8020000 0x0 0x1000>;
        msi-controller;
        compatible = "arm,gic-v2m-frame";
    };
};

更直接的选择是使用 fdtget:

fdtget -t i -t x virt.dtb /intc reg
0 8000000 0 10000 0 8010000 0 10000

我同意 Peter Maydell 的观点,即如果您在 QEMU 中运行 Linux,则最好在运行时使用 DTB 来检索 GIC CPU 和分配器接口(interface)的地址。
但以我的拙见,非 DTB 方法在模拟裸机环境中仍然更容易实现。

关于qemu - 如何获取qemu机器 "virt"的PERIPHBASE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48666046/

相关文章:

c++ - 与裸机目标的 cmake 项目链接错误

virtual-machine - 如何在裸机上安装 Vagrant Box?

linux - 内核调试-gdb步骤跳出函数

linux - 使用 qemu 启动带有自定义内核的 OpenSUSE(或任何其他操作系统)?

React-native - iOS - 架构arm64的34个重复符号

android - 如何在 Android Native ARM64 上调用清除缓存?

linux - 无法增加 qemu 原始图像文件大小

ubuntu-16.04 - 如何通过 qemu 命令行将 block 设备附加到 qemu VM?

ios - "Invalid operand for instruction"arm64 架构错误

windows - 用MSVC工具生成裸机二进制文件的过程是什么?