Формат источника дерева устройств (DTS) - это текстовое представление дерева устройств. Компилятор дерева устройств (DTC) преобразует этот формат в двоичное дерево устройств, которое является формой, ожидаемой ядром Linux.
Использование ссылок
Проект DTC (компилятор дерева устройств + накладываемые патчи) описывает формат DTS в dtc-format.txt и manual.txt . Формат и правила DTO описаны в dt-object-internal.txt . В этих документах описывается, как обновить основное DT, используя fragment@x
узла fragment@x
и синтаксис __overlay__
в оверлейном DT. Например:
/ { fragment@0 { target = <&some_node>; __overlay__ { some_prop = "okay"; ... }; }; };
Однако Google настоятельно рекомендует не использовать fragment@x
и синтаксис __overlay__
, а вместо этого использовать ссылочный синтаксис. Например:
&some_node { some_prop = "okay"; ... };
Ссылочный синтаксис компилируется dtc
в тот же объект, что и выше, с использованием синтаксиса __overlay__
. Этот синтаксис не заставляет вас нумеровать фрагменты, что позволяет легко читать и записывать оверлейный DTS. Если ваш dtc
не поддерживает этот синтаксический сахар, используйте dtc в AOSP .
Использование этикеток
Чтобы разрешить неопределенные ссылки на узлы, отсутствующие во время компиляции, в .dts
файла DT .dts
должен быть тег /plugin/
. Например:
/dts-v1/; /plugin/;
Отсюда вы можете настроить таргетинг на узлы, которые будут наложены, используя ссылку, которая представляет собой абсолютный путь к узлу с префиксом амперсанда (&). Например, для node@0
в основном ОУ:
Определите метки в основном ОУ ... | ... затем используйте ярлыки. |
---|---|
[my_main_dt.dts] /dts-v1/; / { my_node: node@0 { status = "disabled"; my_child: child@0 { value = <0xffffffff>; }; }; }; | [my_overlay_dt.dts] /dts-v1/; /plugin/; &my_node { status = "okay"; }; &my_child { value = <0x1>; }; |
Переопределение
Если ссылочное целевое свойство существует в основном DT, оно переопределяется после DTO; в противном случае он добавляется. Например:
main.dts | overlay.dts | Объединенный результат |
---|---|---|
[my_main_dt.dts] /dts-v1/; / { compatible = "corp,foo"; my_node: node@0 { status = "disabled"; }; }; | [my_overlay_dt.dts] /dts-v1/; /plugin/; &my_node { status = "okay"; }; | /dts-v1/; / { compatible = "corp,foo"; ... node@0 { linux,phandle = <0x1>; phandle = <0x1>; status = "okay"; }; }; |
Добавление
Если ссылочное целевое свойство не существует в основном DT, оно добавляется после DTO. Например:
main.dts | overlay.dts | Объединенный результат |
---|---|---|
[my_main_dt.dts] /dts-v1/; / { compatible = "corp,foo"; my_node: node@0 { status = "okay"; }; }; | [my_overlay_dt.dts] /dts-v1/; /plugin/; &my_node { new_prop = "bar"; }; | /dts-v1/; / { compatible = "corp,foo"; ... node@0 { linux,phandle = <0x1>; phandle = <0x1>; status = "okay"; new_prop = "bar"; }; }; |
Дочерние узлы
Примеры синтаксиса дочернего узла:
main.dts | overlay.dts | Объединенный результат |
---|---|---|
[my_main_dt.dts] /dts-v1/; / { compatible = "corp,foo"; my_nodes: nodes { compatible = "corp,bar"; node@0 { status = "disabled"; }; }; }; | [my_overlay_dt.dts] /dts-v1/; /plugin/; &my_nodes { new_prop1 = "abc"; node@0 { status = "okay"; new_prop2 = "xyz"; }; }; | /dts-v1/; / { compatible = "corp,foo"; ... nodes { linux,phandle = <0x1>; phandle = <0x1>; compatible = "corp,bar"; new_prop1 = "abc"; node@0 { linux,phandle = <0x2>; phandle = <0x2>; status = "okay"; new_prop2 = "xyz"; }; }; }; |