在此.dtb文件中指定此内存段多长时间?

时间:2019-04-07 17:33:20

标签: qemu riscv device-tree

我觉得我不了解如何解释dtb / dts文件的格式,希望您能提供帮助。运行这些命令后:

qemu-system-riscv64 -machine virt -machine dumpdtb=riscv64-virt.dtb
dtc -I dtb -O dts -o riscv-virt.dts riscv-virt.dtb

结果riscv-virt.dts包含机器的memory定义:

/dts-v1/;

/ {
    #address-cells = <0x02>;
    #size-cells = <0x02>;
    compatible = "riscv-virtio";
    model = "riscv-virtio,qemu";

    ...other memory definitions...

    memory@80000000 {
        device_type = "memory";
        reg = <0x0 0x80000000 0x0 0x8000000>;
    };
};

我有几个问题:

  1. 为什么会有多对reg定义?基于this link,第二个0x0 0x8000000会覆盖上一个配对0x0 0x80000000中刚刚设置的内容。
  2. 该存储库多长时间?哪个值告诉我这一点?
  3. 第一行显示memory@80000000,但是reg命令从0x0开始。内存是从0x0还是0x80000000开始的?

基本上,我只是觉得我不明白如何解释这一点。用简单的英语来说,这里定义了什么?

1 个答案:

答案 0 :(得分:0)

dts-specification页中。 13您可以部分阅读。 Reg以(地址,长度)对形式给出。在您的情况下,地址和长度以64字节给出,这是通过使用 2! 32位值完成的。 因此,地址为0x80000000,大小为0x8000000

编辑: 变量#address-cells和#size-cells指定用于地址和大小的单元数(32位值)。在原始的 dts 中,它总是在设备的母节点中指定。也许您可以在反编译的dts中找到它