Как долго этот раздел памяти указан в этом файле .dtb? - PullRequest
0 голосов
/ 07 апреля 2019

Мне кажется, что я не понимаю, как интерпретировать формат файлов 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?Основываясь на этой ссылке , кажется, что вторая 0x0 0x8000000 перезаписывает то, что было только что установлено в предыдущей паре, 0x0 0x80000000.
  2. Как долго этот банк памяти?Какое значение говорит мне об этом?
  3. В первой строке написано memory@80000000, но затем команды reg начинаются с 0x0.Память начинается с 0x0 или 0x80000000?

По сути, я просто чувствую, что не понимаю, как это интерпретировать.На простом английском, что здесь определяется?

1 Ответ

0 голосов
/ 07 апреля 2019

In dts-спецификация p.13 Вы можете прочитать это частично.Рег дается в (адрес, длина) парами.В вашем случае адрес и длина указываются в 64 байтах, что делается с помощью 2! 32-битных значений.Таким образом, адрес равен 0x80000000, а размер 0x8000000

Редактировать: переменные # address-cell и # size-cell указывают, сколько ячеек (32-битных значения) используются для адреса и размера.В оригинале dts он всегда указывается в материнском узле устройства.Может быть, вы можете найти его в декомпилированном DTS

...