Для компиляции исходных файлов дерева устройств (DTS) можно использовать компилятор дерева устройств (DTC). Однако перед применением наложенного дерева устройств (DT) к целевому основному DT следует также проверить результат, смоделировав поведение наложенного дерева устройств (DTO).
Компиляция с DTC
При использовании dtc
для компиляции .dts
необходимо добавить опцию -@
, чтобы добавить узел __symbols__
в результирующий .dtbo
. Узел __symbols__
содержит список всех узлов, отмеченных меткой, которую библиотека DTO может использовать для ссылок.
Пример команды для сборки основного DT .dts
:
dtc -@ -O dtb -o my_main_dt.dtb my_main_dt.dts
Пример команды для создания оверлея DT .dts
:
dtc -@ -O dtb -o my_overlay_dt.dtbo my_overlay_dt.dts
Проверьте результаты DTO на хосте
Проверка поможет выявить ошибки, которые могут возникнуть при размещении наложенного DT на основном DT. Перед обновлением целевой платформы вы можете проверить результат наложения DT на хосте, смоделировав поведение DTO с помощью /include/
в .dts
.
Рисунок 1. Используйте синтаксис /include/ для имитации DTO на хосте.
- Создайте копию файла
.dts
. В копии удалите заголовок первой строки. Пример: Сохраните файл как/dts-v1/; /plugin/;
my_overlay_dt_wo_header.dts
(или под любым другим именем по вашему выбору). - Создайте копию основного
.dts
. В копии, после последней строки, добавьте синтаксис include для файла, созданного на шаге 1. Например: Сохраните файл как/include/ "my_overlay_dt_wo_header.dts"
my_main_dt_with_include.dts
(или под любым другим именем). - Используйте
dtc
для компиляцииmy_main_dt_with_include.dts
, чтобы получить объединённый DT, который должен быть таким же, как DTO. Например:dtc -@ -O dtb -o my_merged_dt.dtb my_main_dt_with_include.dts
- Используйте
dtc
для сбросаmy_merged_dt.dto
.dtc -O dts -o my_merged_dt.dts my_merged_dt.dtb
Проверка DTO в Android 9
Для Android 9 требуется раздел наложения BLOB-объектов (Device Tree Blob Overlay, DTBO). Чтобы добавить узлы или изменить свойства в SoC DT, загрузчик должен динамически наложить DT, специфичный для устройства, на SoC DT.
Укажите примененные наложения
Чтобы система Vendor Test Suite (VTS) могла оценить корректность приложения оверлея, вендоры должны добавить новый параметр командной строки ядра androidboot.dtbo_idx
, который указывает оверлеи, выбранные из раздела DTBO. В Android 12 с версией ядра 5.10 или выше этот параметр проходит через bootconfig. Например, параметр androidboot.dtbo_idx=x,y,z
возвращает x
, y
и z
как нулевые индексы DTO из раздела DTBO, применяемых (в указанном порядке) загрузчиком к базовому DT.
Наложения могут применяться к узлам из основного DT или добавлять новые узлы, но не могут ссылаться на узел, добавленный в предыдущем наложении. Это ограничение необходимо, поскольку приложение наложения не объединяет таблицу символов наложения с таблицей символов основного DT (отсутствие объединения позволяет избежать конфликтов в именах символов и усложнения зависимостей между наложениями).
Пример: Недопустимые наложения
В этом примере overlay_2.dts
ссылается на узел e
, который был добавлен overlay_1.dts
. После применения overlay_1
к основному DT, если попытаться применить overlay_2
к результирующему DT, приложение наложения завершится с ошибкой, связанной с отсутствием символа e
в таблице символов базового DT.
main.dts | overlay_1.dts | overlay_2.dts |
---|---|---|
[main.dts] /dts-v1/; / { a: a {}; b: b {}; c: c {}; }; | [overlay_1.dts] /dts-v1/; /plugin/; &b { ref1 = <&a>; e: e { prop = <0x0a>; phandle = <0x04>; }; }; | [overlay_2.dts] /dts-v1/; /plugin/; /* invalid! */ &e { prop = <0x0b>; }; |
Пример: допустимые наложения
В этом примере overlay_2.dts
ссылается только на узел b
из основного DTS. Когда overlay_1
применяется к базовому DT, а затем применяется overlay_2
, значение свойства prop
в узле e
(установленное overlay_1.dts
) перезаписывается значением, установленным overlay_2.dts
.
main.dts | overlay_1.dts | overlay_2.dts |
---|---|---|
[final.dts] /dts-v1/; / { a: a {}; b: b {}; c: c {}; }; | [overlay_1.dts] /dts-v1/; /plugin/; &b { ref1 = <&a>; e { prop = <0x0c>; }; }; | [overlay_2.dts] /dts-v1/; /plugin/; /* valid */ &b { ref1 = <&c>; e { prop = <0x0d>; }; }; |
Реализовать раздел DTBO
Чтобы реализовать требуемый раздел DTBO, убедитесь, что загрузчик может выполнять следующие действия:
- Определите, на какой плате он работает, и выберите соответствующие наложения, которые необходимо применить.
- Добавьте параметр
androidboot.dtbo_idx
в командную строку ядра.- Параметр должен указывать нулевые индексы DTO из образа раздела DTBO, примененного к базовому DT (в том же порядке).
- Индексы должны ссылаться на положение наложения в разделе DTBO.
Подробную информацию о структуре раздела DTBO см. в разделе Наложения дерева устройств .
Проверить раздел DTBO
Вы можете использовать VTS для проверки следующего:
- Наличие параметра командной строки ядра
androidboot.dtbo_idx
(путем проверки того, чтоInit
автоматически настроил соответствующее системное свойствоro.boot.dtbo_idx
). - Проверка системного свойства
ro.boot.dtbo_idx
(путем проверки того, что свойство указывает хотя бы один допустимый индекс образа DTBO). - Проверка правильности раздела DTBO (также проверяет наложения в разделе DTBO, примененные к базовому DT).
- Дополнительные узлы или изменения свойств в результирующем DT представляются ядру Linux.
Например, в следующих оверлеях и окончательном DT добавление androidboot.dtbo_idx=5,3
в командную строку ядра проходит проверку, но добавление androidboot.dtbo_idx=3,5
в командную строку ядра не проходит проверку.
Наложение DT в индексе 3 | Наложение DT в индексе 5 |
---|---|
[overlay_1.dts] /dts-v1/; /plugin/; &c { prop = <0xfe>; }; | [overlay_2.dts] /dts-v1/; /plugin/; &c { prop = <0xff>; }; |
Финальный ДТ |
---|
/dts-v1/; / { a { phandle = <0x1>; }; b { phandle = <0x2>; }; c { phandle = <0x3>; prop = <0xfe>; }; __symbols__ { a = "/a"; b = "/b"; c = "/c"; }; }; |
Контент и образцы кода на этой странице предоставлены по лицензиям. Java и OpenJDK – это зарегистрированные товарные знаки корпорации Oracle и ее аффилированных лиц.
Последнее обновление: 2025-10-10 UTC.