Для компиляции исходных файлов дерева устройств (DTS) можно использовать компилятор дерева устройств (DTC). Однако, прежде чем применять наложенное дерево устройств (DT) к основному целевому дереву устройств, следует также проверить результат, смоделировав поведение наложенного дерева устройств (DTO).
Компиляция с использованием DTC
При использовании dtc для компиляции .dts необходимо добавить опцию -@ , чтобы добавить узел __symbols__ в результирующий файл .dtbo . Узел __symbols__ содержит список всех узлов, помеченных меткой, которые библиотека DTO может использовать для ссылок.
Пример команды для создания основного файла .dts :
dtc -@ -O dtb -o my_main_dt.dtb my_main_dt.dts
Пример команды для создания файла .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. В копии, после последней строки, добавьте синтаксис включения для файла, созданного на шаге 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 требуется раздел наложения дерева устройств (DTBO). Чтобы добавить узлы или внести изменения в свойства дерева устройств SoC, загрузчик должен динамически накладывать дерево устройств, специфичное для данного устройства, поверх дерева устройств SoC.
Укажите примененные наложения
Для того чтобы набор тестов поставщика (VTS) мог оценить корректность наложенного приложения, поставщикам необходимо добавить новый параметр командной строки ядра androidboot.dtbo_idx , указывающий на наложения, выбранные из раздела DTBO. В Android 12 с ядром версии 5.10 или выше этот параметр передается через bootconfig. Например, параметр androidboot.dtbo_idx=x,y,z сообщает x , y и z как индексы DTO из раздела DTBO, начиная с нуля, которые загрузчик применяет (в указанном порядке) к базовому DT.
Наложения могут применяться к узлам из основной таблицы данных или добавлять новые узлы, но не могут ссылаться на узел, добавленный в предыдущем наложении. Это ограничение необходимо, поскольку приложение наложения не объединяет таблицу символов наложения с основной таблицей символов таблицы данных (отсутствие слияния позволяет избежать конфликтов в именах символов и усложнения зависимостей между наложениями).
Пример: Недопустимые наложения
В этом примере overlay_2.dts ссылается на узел e , который был добавлен файлом overlay_1.dts . После применения overlay_1 к основному DT, если будет предпринята попытка применить overlay_2 к результирующему DT, приложение overlay завершится с ошибкой, указывающей на отсутствие символа 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).
- Дополнительные узлы или изменения свойств в результирующем дереве данных передаются ядру 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>; };
|
| Финальный DT |
|---|
/dts-v1/;
/ {
a {
phandle = <0x1>;
};
b {
phandle = <0x2>;
};
c {
phandle = <0x3>;
prop = <0xfe>;
};
__symbols__ {
a = "/a";
b = "/b";
c = "/c";
};
};
|
Контент и образцы кода на этой странице предоставлены по лицензиям. Java и OpenJDK – это зарегистрированные товарные знаки корпорации Oracle и ее аффилированных лиц.
Последнее обновление: 2026-06-18 UTC.