Google is committed to advancing racial equity for Black communities. See how.
Эта страница была переведа с помощью Cloud Translation API.
Switch to English

Синтаксис DTO

Формат источника дерева устройств (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 .

Использование этикеток

Чтобы разрешить неопределенные ссылки на узлы, отсутствующие во время компиляции, файл оверлея 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";
    };
  };
};