Загрузка 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
Существует два способа применения оверлеев:
- Включить и определить оверлеи в FIT-образ и автоматически их применять;
- Вручную применять оверлеи;
В оставшейся части документа будет рассмотрено использование оверлеев с помощью ручного подхода. Информацию об использовании оверлеев как части образа FIT можно найти в документе doc/uImage.FIT/overlay-fdt-boot.txt
загрузчика U-Boot.
Ручная загрузка и применение оверлеев
- Определите, где разместить базовый devicetree и оверлей к нему. Убедитесь, что у вас достаточно места для наложения оверлея.
- Загрузите базовый devicetree и оверлей к нему:
- Установите базовый devicetree как рабочее дерево FDT:
- Увеличте дерево FDT настолько, чтобы было возможно применить к нему все возможные (нужные для вас?) оверлеи:
- Примените оверлей:
- Загрузите систему, как это делается с традиционным
dtb
.
=> setenv fdtaddr 0x87f00000
=> setenv fdtovaddr 0x87fc0000
=> load ${devtype} ${bootpart} ${fdtaddr} ${bootdir}/base.dtb
=> load ${devtype} ${bootpart} ${fdtovaddr} ${bootdir}/overlay.dtbo
=> fdt addr $fdtaddr
=> fdt resize 8192
=> fdt apply $fdtovaddr
Для bootm
:
=> bootm ${kerneladdr} - ${fdtaddr}
Для bootz
:
=> bootz ${kerneladdr} - ${fdtaddr}
Обратите внимание, что в случае ошибки и базовый devicetree, и его оверлеи будут аннулированы, поэтому сохраните копии, чтобы избежать их перезагрузки.