此 .dtb 文件中指定的内存段有多长?
How long is this memory section specified in this .dtb file?
我觉得我不明白如何解释 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>;
};
};
我有几个问题:
- 为什么会有多对reg定义?基于 this link,似乎第二个
0x0 0x8000000
覆盖了前一对 0x0 0x80000000
. 中刚刚设置的内容
- 这个内存条有多长?哪个值告诉我这个?
- 第一行说
memory@80000000
,但随后的 reg 命令从 0x0
开始。内存是从0x0
还是0x80000000
开始的?
基本上,我只是觉得我不明白如何解释这个。用简单的英语来说,这里定义了什么?
在 dts-specification 页。 13 你可以部分阅读。 Reg 以(地址,长度)对形式给出。在您的情况下,地址和长度以 64 字节给出,这是通过使用 2! 32 位值完成的。
因此地址为 0x80000000,大小为 0x8000000
编辑:
变量#address-cells 和#size-cells 指定有多少个单元格(32 位值)用于地址和大小。在原始的 dts 中,它总是在设备的母节点中指定。也许你可以在反编译的 dts 中找到它
我觉得我不明白如何解释 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>;
};
};
我有几个问题:
- 为什么会有多对reg定义?基于 this link,似乎第二个
0x0 0x8000000
覆盖了前一对0x0 0x80000000
. 中刚刚设置的内容
- 这个内存条有多长?哪个值告诉我这个?
- 第一行说
memory@80000000
,但随后的 reg 命令从0x0
开始。内存是从0x0
还是0x80000000
开始的?
基本上,我只是觉得我不明白如何解释这个。用简单的英语来说,这里定义了什么?
在 dts-specification 页。 13 你可以部分阅读。 Reg 以(地址,长度)对形式给出。在您的情况下,地址和长度以 64 字节给出,这是通过使用 2! 32 位值完成的。 因此地址为 0x80000000,大小为 0x8000000
编辑: 变量#address-cells 和#size-cells 指定有多少个单元格(32 位值)用于地址和大小。在原始的 dts 中,它总是在设备的母节点中指定。也许你可以在反编译的 dts 中找到它