Загрузка DTBO

Оверлеи Devicetree — это почти те же Devicetree-файлы, но с несколько иным синтаксисом. Пожалуйста, обратитесь к файлу dt-object-internal.txt в исходном коде компилятора devicetree за информацией о внутреннем формате оверлеев: https://git.kernel.org/pub/scm/utils/dtc/dtc.git/tree/Documentation/dt-object-internal.txt

Способы использования оверлеев в U-Boot

Существует два способа применения оверлеев:

  1. Включить и определить оверлеи в FIT-образ и автоматически их применять;
  2. Вручную применять оверлеи;

В оставшейся части документа будет рассмотрено использование оверлеев с помощью ручного подхода. Информацию об использовании оверлеев как части образа FIT можно найти в документе doc/uImage.FIT/overlay-fdt-boot.txt загрузчика U-Boot.

Ручная загрузка и применение оверлеев

  1. Определите, где разместить базовый devicetree и оверлей к нему. Убедитесь, что у вас достаточно места для наложения оверлея.
  2. => setenv fdtaddr 0x87f00000
    => setenv fdtovaddr 0x87fc0000
  3. Загрузите базовый devicetree и оверлей к нему:
  4. => load ${devtype} ${bootpart} ${fdtaddr} ${bootdir}/base.dtb
    => load ${devtype} ${bootpart} ${fdtovaddr} ${bootdir}/overlay.dtbo
  5. Установите базовый devicetree как рабочее дерево FDT:
  6. => fdt addr $fdtaddr
  7. Увеличте дерево FDT настолько, чтобы было возможно применить к нему все возможные (нужные для вас?) оверлеи:
  8. => fdt resize 8192
  9. Примените оверлей:
  10. => fdt apply $fdtovaddr
  11. Загрузите систему, как это делается с традиционным dtb.

Для bootm:

=> bootm ${kerneladdr} - ${fdtaddr}

Для bootz:

=> bootz ${kerneladdr} - ${fdtaddr}

Обратите внимание, что в случае ошибки и базовый devicetree, и его оверлеи будут аннулированы, поэтому сохраните копии, чтобы избежать их перезагрузки.