Дерева пристроїв та оверлеї
Дерево пристроїв описує апаратне забезпечення плати, щоб ядро могло прив’язати до нього драйвери. Плата Modalix завантажує базове дерево пристроїв, а потім застосовує оверлеї для того, що ви під’єднуєте, наприклад для камери. На цій сторінці показано, як вибрати оверлей, що постачається з випуском, як написати власний і як перевір ити результат.
Цю сторінку написано на основі вихідного коду ядра та U-Boot для випуску платформи 2.1.3 та інших посібників цього сайту. Кроки в тому вигляді, як їх тут описано, ще не виконували на платі.
Як плата завантажує дерево пристроїв
- U-Boot завантажує базове дерево пристроїв для плати з активного каталогу
завантаження,
boot-0абоboot-1. - U-Boot застосовує кожен оверлей, названий у змінній
dtbos, у вказаному порядку. - Ядро запускається з об’єднаним деревом пристроїв.
Дерево пристроїв описує апаратне забезпечення. Воно не додає драйвер. Дра йвер пристрою вже має бути в ядрі або встановлений як модуль. Див. модель використання дерева пристроїв у документації ядра.
Вибір оверлея з випуску
Випуск містить оверлеї для підтримуваних камер і для конфігурацій PCIe та флеш-пам’яті. Їхні вихідні файли розміщено в каталозі overlays дерева ядра.
-
Перегляньте оверлеї на платі:
sima@modalix:~$ ls /boot/boot-*/*.dtbo -
Перервіть U-Boot, задайте в
dtbosоверлей і завантажте плату:sima$ setenv dtbos modalix-som-waveshare-ARDU-IMX477-1CAM.dtbosima$ saveenvsima$ boot
Щоб застосувати більше ніж один оверлей, розділіть назви пробілами. Про оверлеї камер див. розділ Підтримувані камери MIPI.
Написання власного оверлея
Напишіть оверлей, коли під’єднуєте пристрій, для якого у випуску немає оверлея.
У цьому прикладі додається розширювач GPIO з інтерфейсом I2C за адресою 0x27 на шині I2C 0:
/dts-v1/;
/plugin/;
&i2c00 {
status = "okay";
clock-frequency = <400000>;
#address-cells = <1>;
#size-cells = <0>;
pcf8574: gpio@27 {
compatible = "nxp,pcf8574";
reg = <0x27>;
gpio-controller;
#gpio-cells = <2>;
};
};
&i2c00вибирає вузол, який потрібно змінити, за його міткою в базовому дереві пристроїв.status = "okay"вмикає вузол, який базове дерево пристроїв залишає вимкненим.#address-cellsі#size-cellsповторюють значення шини з базового дерева пристроїв. Без нихdtcпопереджає, що не може перевіритиreg.- Дочірній вузол — це пристрій.
compatibleвибирає драйвер, аreg— це адреса пристрою на шині.
Перш ніж писати оверлей, перевірте, що ядро має драйвер. Рядок compatible
має належати драйверу, який вмикає
simaai_modalix_defconfig,
або модулю, який ви збираєте та встановлюєте.
Більший приклад — оверлей камери з дерева ядра, наприклад
modalix-som-waveshare-ARDU-IMX477-1CAM.dtso.
Він додає тактовий сигнал для сенсора, налаштовує шину I2C і контакт вимкнення живлення,
вмикає інтерфейс CSI та його відеовузли й під’єднує сенсор до інтерфейсу CSI двома
лініями даних.
Збирання та встановлення оверлея
-
Скомпілюйте вихідний файл оверлея у файл
.dtbo, як описано в розділі Збирання BSP з вихідного коду. -
Скопіюйте файл
.dtboдо активного каталогу завантаження плати. -
Додайте файл до
dtbosв U-Boot після оверлеїв, які вже там перелічено:sima$ env set dtbos $dtbos my-device.dtbosima$ saveenvsima$ boot
Перевірка результату
Перевіряйте в такому порядку. Кожен крок залежить від попереднього.
-
Оверлей застосовано. Знайдіть новий вузол у дереві пристроїв, яке використовує ядро:
root@modalix:~# find /proc/device-tree -name "gpio@27" -
Драйвер прив’язався до пристрою. Знайдіть драйвер у журналі ядра:
root@modalix:~# dmesg | grep -i pcf857x -
Пристрій працює. Скористайтеся інструментом для такого типу пристроїв. Для розширювача GPIO
gpiodetectпоказує новий чип. Для камериcam -lпоказує камеру.
Якщо не працює
| Що ви бачите | Імовірна причина | Що перевірити |
|---|---|---|
Вузла немає в /proc/device-tree | U-Boot не застосував оверлей | printenv dtbos в U-Boot, файл в активному каталозі завантаження та помилки в консолі U-Boot |
| Вузол є, але драйвер не прив’язується | Ядро не має драйвера для рядка compatible | Конфігурацію ядра та dmesg |
| Драйвер повідомляє про помилку | Неправильна шина чи адреса або бракує тактового сигналу, живлення, скидання чи GPIO | dmesg, а для пристрою I2C — i2cdetect |
| Інший пристрій перестає працювати | Два оверлеї змінюють той самий вузол або той самий контакт | Застосовуйте оверлеї по одному |
Наступні кроки
- Збирання BSP з вихідного коду: збирання ядра, дерев пристроїв та оверлеїв.
- Низькошвидкісний ввід-вивід: призначення контактів і вузли дерева пристроїв для GPIO, UART, I2C та SPI.
- Підтримка інтерфейсів Modalix DevKit: які інтерфейси вмикає дерево пристроїв випуску.