Вы можете использовать компилятор дерева устройств (DTC) для компиляции исходных файлов дерева устройств (DTS). Однако перед применением наложения дерева устройств (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 на хост, смоделировав поведение 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 требуется раздел наложения BLOB-объектов дерева устройств (DTBO). Чтобы добавить узлы или внести изменения в свойства SoC DT, загрузчик должен динамически накладывать DT для конкретного устройства на DT SoC.
Укажите примененные наложения
Чтобы позволить 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 (отказ от объединения позволяет избежать конфликтов в именах символов и усложнения зависимостей между наложениями).
Пример: недопустимые наложения.
В этом примере overlay_2.dts
относится к узлу e
, который был добавлен overlay_1.dts
. Если после применения overlay_1
к основному ОУ будет предпринята попытка применить overlay_2
к результирующему ОУ, приложение наложения завершится с ошибкой, что символ e
отсутствует в таблице символов для базового ОУ.
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
применяется к базовому ОУ, а затем применяется 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, которые применяются к базовому ОУ).
- Дополнительные узлы или изменения свойств в результирующем ОУ передаются ядру 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 и ее аффилированных лиц.
Последнее обновление: 2024-11-18 UTC.