Компилятор дерева устройств не распознает синтаксис C для включаемых файлов

Я хочу скомпилировать дерево устройств моей платы вручную. Я скачал последнюю версию dtc из официального источника. , но когда я пытаюсь выполнить следующую команду, я получаю сообщение об ошибке, предлагающее изменить все директивы #include на /include/ и так далее для #define и т. д.

dtc -I dts -O dtb -p 0x1000 meson-gxl-s905x-khadas-vim.dts -o kvim1.dtb

Моя плата — Khadas Vim с SoC amlogic S905x в основе. Все включаемые файлы присутствуют, и ошибка:

Error: meson-gxl-s905x-khadas-vim.dts:8.1-9 syntax error
FATAL ERROR: Unable to parse input tree

8-я строка:

#include <dt-bindings/input/input.h>

Изменение #include на /include/ устранит ошибку!

Если вы знаете какую-либо ссылку на «язык» дерева устройств (кроме документации U-boot), предоставьте ее, пожалуйста.


person Saleh    schedule 02.06.2018    source источник


Ответы (1)


Это не проблема синтаксиса дерева устройств, вам просто нужно предварительно обработать файл .dts с помощью препроцессора C, cpp, чтобы получить файл, который может быть обработан компилятором дерева устройств как есть.

В вашем конкретном случае, предполагая, что ваш текущий каталог будет корневым каталогом ядра, вам нужно будет использовать две следующие команды:

cpp -nostdinc -I include -I arch  -undef -x assembler-with-cpp  arch/arm64/boot/dts/amlogic/meson-gxl-s905x-khadas-vim.dts meson-gxl-s905x-khadas-vim.dts.preprocessed

dtc -I dts -O dtb -p 0x1000 meson-gxl-s905x-khadas-vim.dts.preprocessed -o kvim1.dtb

kvim1.dtb: Warning (unit_address_vs_reg): Node /scpi/clocks/scpi_clocks@0 has a unit name, but no reg property
kvim1.dtb: Warning (unit_address_vs_reg): Node /soc/bus@c8100000/pinctrl@14 has a unit name, but no reg property
kvim1.dtb: Warning (unit_address_vs_reg): Node /soc/periphs@c8834000/rng has a reg or ranges property, but no unit name
kvim1.dtb: Warning (unit_address_vs_reg): Node /soc/periphs@c8834000/pinctrl@4b0 has a unit name, but no reg property
kvim1.dtb: Warning (unit_address_vs_reg): Node /soc/periphs@c8834000/eth-phy-mux has a reg or ranges property, but no unit name
kvim1.dtb: Warning (unit_address_vs_reg): Node /gpio-keys-polled/button@0 has a unit name, but no reg property
kvim1.dtb: Warning (simple_bus_reg): Node /soc/bus@c8100000/pinctrl@14 missing or empty reg/ranges property
kvim1.dtb: Warning (simple_bus_reg): Node /soc/periphs@c8834000/rng simple-bus unit address format error, expected "0"
kvim1.dtb: Warning (simple_bus_reg): Node /soc/periphs@c8834000/pinctrl@4b0 missing or empty reg/ranges property
kvim1.dtb: Warning (simple_bus_reg): Node /soc/periphs@c8834000/eth-phy-mux simple-bus unit address format error, expected "55c"

Проверка сборки kvim1.dtb:

ls -ail kvim1.tdb
4359446 -rw-rw-r-- 1 user user 27568 Jun  2 12:05 kvim1.dtb

Официальную спецификацию дерева устройств см. на его официальном веб-сайте и на его git-репозиторий.

person Frant    schedule 02.06.2018