Форум по операционной системе GNU/Linux и свободному программному обеспечению
Текущее время: 24 апр 2019, 07:36

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Devicetree
Непрочитанное сообщениеДобавлено: 28 июн 2018, 15:52 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11699
Откуда: Харьков
Devicetree - это относительно новая технология описания устройств, до 2009 г. её вообще не было (это какой версии ядра соответствует?), а широко применяется она при сборке ядра и модулей ядра в 2013 г. (я могу слегка ошибаться в датах, но где-то так)... а в последние годы ещё и появляется техника оверлеев Devicetree, файлы .dtso / .dtbo, которая при сборке образов для Rapsberry Pi (Rapsbian etc.) ... "то ли применяют, то ли не применяют, то ли применяют наполовину и кое-где" :lol:

Любой модуль ядра можно написать (код) либо с использованием файла .dts (текстовое описание фрагмента DT, Devicetree для такого устройства), либо вовсе без него (как, например, драйвера всех PCI устройств в x86 ) - это на вкус написателя кода.
Некоторые процессорные архитектуры (Intel x86) не используют (почти) технику DT, некоторые архитектуры (ARM) используют технику DT повсеместно, некоторые (MIPS, PPC) - кое-где используют (для некоторых устройств), а в остальных нет.

Чтобы понимать использование Devicetree, все эти .dts и .dtb, нужно, хотя бы документацию и стандарты про Devicetree ... а это вещи новые и не всегда легко найти. Эту тему я и создаю как справочник по документации Devicetree.


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
 Заголовок сообщения: Re: Devicetree
Непрочитанное сообщениеДобавлено: 28 июн 2018, 15:54 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11699
Откуда: Харьков
Olej писал(а):
как справочник по документации Devicetree.

Стандарт: The Devicetree Specification
Цитата:
Current Release
DeviceTree Specification Release v0.2 - Released 20 December 2017

Past Releases
DeviceTree Specification Release v0.1 - Released 18 December 2017


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
 Заголовок сообщения: Re: Devicetree
Непрочитанное сообщениеДобавлено: 28 июн 2018, 15:55 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11699
Откуда: Харьков
Olej писал(а):
Любой модуль ядра можно написать (код) либо с использованием файла .dts (текстовое описание фрагмента DT, Devicetree для такого устройства), либо вовсе без него (как, например, драйвера всех PCI устройств в x86 ) - это на вкус написателя кода.
Некоторые процессорные архитектуры (Intel x86) не используют (почти) технику DT, некоторые архитектуры (ARM) используют технику DT повсеместно, некоторые (MIPS, PPC) - кое-где используют (для некоторых устройств), а в остальных нет.

Это интересно ;) ... смотрим по дереву исходников ванильного ядра (4.9.90):

- ARM:
Код:
olej@Cobalt ~/2018_WORKS/Triol/linux-4.9.90/arch/arm/boot $ pwd
/home/olej/2018_WORKS/Triol/linux-4.9.90/arch/arm/boot
olej@Cobalt ~/2018_WORKS/Triol/linux-4.9.90/arch/arm/boot $ ls -lR | grep ".dts" | wc -l
1449

olej@Cobalt ~/2018_WORKS/Triol/linux-4.9.90/arch/arm64/boot $ pwd
/home/olej/2018_WORKS/Triol/linux-4.9.90/arch/arm64/boot
olej@Cobalt ~/2018_WORKS/Triol/linux-4.9.90/arch/arm64/boot $ ls -lR | grep ".dts" | wc -l
179

- MIPS:
Код:
olej@Cobalt ~/2018_WORKS/Triol/linux-4.9.90/arch/mips/boot $ pwd
/home/olej/2018_WORKS/Triol/linux-4.9.90/arch/mips/boot
olej@Cobalt ~/2018_WORKS/Triol/linux-4.9.90/arch/mips/boot $ ls -lR | grep ".dts" | wc -l
86

- PPC:
Код:
olej@Cobalt ~/2018_WORKS/Triol/linux-4.9.90/arch/powerpc/boot $ pwd
/home/olej/2018_WORKS/Triol/linux-4.9.90/arch/powerpc/boot
olej@Cobalt ~/2018_WORKS/Triol/linux-4.9.90/arch/powerpc/boot $ ls -lR | grep ".dts" | wc -l
404

- и, наконец, Intel x86:
Код:
olej@Cobalt ~/2018_WORKS/Triol/linux-4.9.90/arch/x86/boot $ pwd
/home/olej/2018_WORKS/Triol/linux-4.9.90/arch/x86/boot
olej@Cobalt ~/2018_WORKS/Triol/linux-4.9.90/arch/x86/boot $ ls -lR | grep ".dts" | wc -l
0


P.S. Это у меня, для примера, дерево ядра 4.9.90, которое использовалось для сборки realtime Xenomai ядра, и под рукой оказалось, чтобы долго не искать ... но и в 4.14 или 4.16 у вас будет похожая история.


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
 Заголовок сообщения: Re: Devicetree
Непрочитанное сообщениеДобавлено: 28 июн 2018, 16:32 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11699
Откуда: Харьков
Для компиляции текстового описания дерева устройств (файл .dts) в бинарные (файл .dtb), используемые ядром Linux (или модулями?) используется Device Tree Compiler (программа dtc).

Смотрим Orange Pi:
Код:
olej@orangepione:~$ uname -a
Linux orangepione 4.14.48-sunxi #1 SMP Wed Jun 6 19:14:27 EEST 2018 armv7l GNU/Linux

olej@orangepione:~$ aptitude search device-tree
i   device-tree-compiler                                - Device Tree Compiler for Flat Device Trees                   

olej@orangepione:~$ aptitude show device-tree-compiler
Package: device-tree-compiler           
Version: 1.4.2-1
State: installed
Automatically installed: no
Multi-Arch: foreign
Priority: extra
Section: devel
Maintainer: Héctor Orón Martínez <zumbi@debian.org>
Architecture: armhf
Uncompressed Size: 449 k
Depends: libc6 (>= 2.7)
Description: Device Tree Compiler for Flat Device Trees
 Device Tree Compiler, dtc, takes as input a device-tree in a given format and outputs a device-tree in another format
 for booting kernels on embedded systems.
 
 Typically, the input format is "dts", a human readable source format, and creates a "dtb", or binary format as output.
Homepage: https://git.kernel.org/cgit/utils/dtc/dtc.git
Tags: admin::boot, implemented-in::c, role::program

Код:
olej@orangepione:~$ dtc -v
Version: DTC 1.4.2

Смотрим в совершенно другой архитектуре - десктоп x86 Fedora 27:
Код:
[olej@xenix buildroot-master]$ uname -a
Linux xenix.localdomain 4.16.13-200.fc27.x86_64 #1 SMP Wed May 30 15:03:53 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

[olej@xenix buildroot-master]$ dnf list dtc
Последняя проверка окончания срока действия метаданных: 26 days, 22:13:06 назад, Пт 01 июн 2018 18:04:24.
Установленные пакеты
dtc.x86_64                                                                1.4.6-1.fc27                                                                @updates

[olej@xenix buildroot-master]$ which dtc
/usr/bin/dtc

[olej@xenix buildroot-master]$ dtc -v
Version: DTC 1.4.6

Код:
[olej@xenix buildroot-master]$ dtc --help
Usage: dtc [options] <input file>

Options: -[qI:O:o:V:d:R:S:p:a:fb:i:H:sW:E:@Ahv]
...


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
 Заголовок сообщения: Re: Devicetree
Непрочитанное сообщениеДобавлено: 28 июн 2018, 16:39 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11699
Откуда: Харьков
Особо интересно в работающей системе восстановить дерево устройств, которое используется системой:
Код:
olej@orangepione:~$ dtc -I fs -O dtb -o own.dtb /proc/device-tree
Warning (unit_address_vs_reg): Node /opp_table/opp@480000000 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /opp_table/opp@648000000 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /opp_table/opp@240000000 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /opp_table/opp@1296000000 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /opp_table/opp@912000000 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /opp_table/opp@816000000 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /opp_table/opp@1200000000 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /opp_table/opp@1104000000 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /opp_table/opp@1008000000 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /opp_table/opp@960000000 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /soc/pinctrl@01c20800/uart0@0 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /soc/pinctrl@01c20800/mmc1@0 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /soc/pinctrl@01c20800/mmc0@0 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /soc/pinctrl@01c20800/led_pins@0 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /soc/pinctrl@01c20800/mmc0_cd_pin@0 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /soc/pinctrl@01c20800/spdif@0 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /soc/pinctrl@01f02c00/ir@0 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /soc/pinctrl@01f02c00/led_pins@0 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /soc/pinctrl@01f02c00/key_pins@0 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /memory has a reg or ranges property, but no unit name

Так мы из /proc восстанавливаем файл .dtb
(в x86 нет такого имени /proc/device-tree ! - это показано в ARM архитектуре)

Теперь их .dtb нужно сделать .dts :
Код:
olej@orangepione:~$ dtc -I dtb -O dts -o own.dts own.dtb
Warning (unit_address_vs_reg): Node /opp_table/opp@480000000 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /opp_table/opp@648000000 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /opp_table/opp@240000000 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /opp_table/opp@1296000000 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /opp_table/opp@912000000 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /opp_table/opp@816000000 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /opp_table/opp@1200000000 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /opp_table/opp@1104000000 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /opp_table/opp@1008000000 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /opp_table/opp@960000000 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /soc/pinctrl@01c20800/uart0@0 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /soc/pinctrl@01c20800/mmc1@0 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /soc/pinctrl@01c20800/mmc0@0 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /soc/pinctrl@01c20800/led_pins@0 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /soc/pinctrl@01c20800/mmc0_cd_pin@0 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /soc/pinctrl@01c20800/spdif@0 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /soc/pinctrl@01f02c00/ir@0 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /soc/pinctrl@01f02c00/led_pins@0 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /soc/pinctrl@01f02c00/key_pins@0 has a unit name, but no reg property
Warning (unit_address_vs_reg): Node /memory has a reg or ranges property, but no unit name

Код:
olej@orangepione:~$ ls -l own.*
-rw-r--r-- 1 olej olej 32942 июн 28 16:34 own.dtb
-rw-r--r-- 1 olej olej 39319 июн 28 16:34 own.dts

Код:
olej@orangepione:~$ head own.dts
/dts-v1/;

/ {
   compatible = "xunlong,orangepi-one", "allwinner,sun8i-h3";
   serial-number = "02c000815fd5e717";
   model = "Xunlong Orange Pi One";
   interrupt-parent = <0x1>;
   #address-cells = <0x1>;
   #size-cells = <0x1>;




Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
 Заголовок сообщения: Re: Devicetree
Непрочитанное сообщениеДобавлено: 28 июн 2018, 16:49 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11699
Откуда: Харьков
Olej писал(а):
Теперь из .dtb нужно сделать .dts :
...
Код:
olej@orangepione:~$ head own.dts
/dts-v1/;

/ {
   compatible = "xunlong,orangepi-one", "allwinner,sun8i-h3";
   serial-number = "02c000815fd5e717";
   model = "Xunlong Orange Pi One";
   interrupt-parent = <0x1>;
   #address-cells = <0x1>;
   #size-cells = <0x1>;

Ещё один способ того же самого - утилита fdtdump :
Код:
olej@orangepione:~$ fdtdump own.dtb > own2.dts

Код:
olej@orangepione:~$ head -n20 own2.dts
/dts-v1/;
// magic:      0xd00dfeed
// totalsize:      0x80ae (32942)
// off_dt_struct:   0x38
// off_dt_strings:   0x766c
// off_mem_rsvmap:   0x28
// version:      17
// last_comp_version:   16
// boot_cpuid_phys:   0x3
// size_dt_strings:   0xa42
// size_dt_struct:   0x7634

/ {
    compatible = "xunlong,orangepi-one", "allwinner,sun8i-h3";
    serial-number = "02c000815fd5e717";
    model = "Xunlong Orange Pi One";
    interrupt-parent = <0x00000001>;
    #address-cells = <0x00000001>;
    #size-cells = <0x00000001>;
    reserved-memory {

Если сравнить - он тут комментариев накидал...


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
 Заголовок сообщения: Re: Devicetree
Непрочитанное сообщениеДобавлено: 04 июл 2018, 00:12 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11699
Откуда: Харьков
Достаточно внятное описание деревьев устройств из проекта Rapsberry Pi (и самое главное, он достаточно свежий) - [url=http://wikihandbk.com/wiki/Raspberry_Pi:Настройка/Деревья_устройств,_оверлеи_и_параметры]Raspberry Pi:Настройка/Деревья устройств, оверлеи и параметры[/url].
Цитата:
Содержание
1 Деревья устройств, оверлеи и параметры
1.1 Часть 1. Деревья устройств
1.1.1 1.1 Базовый синтаксис DTS
1.1.2 1.2. О директиве /include/
1.1.3 1.3. Метки и отсылки
1.1.4 1.4. Семантика дерева устройств
1.2 Часть 2. Оверлеи дерева устройств
1.2.1 2.1. Фрагменты
1.2.2 2.2: Параметры дерева устройств
1.2.2.1 2.2.1: Строковые параметры
1.2.2.2 2.2.2: Целочисленные параметры
1.2.2.3 2.2.3: Булевы параметры
1.2.2.4 2.2.4: Примеры
1.2.2.5 2.2.5: Параметры с несколькими целями
1.2.2.6 2.2.6: Другие примеры оверлеев
1.3 Часть 3. Использование дерева устройств на Raspberry Pi
1.3.1 3.1: Оверлеи и config.txt
1.3.2 3.2: Параметры ДУ
1.3.3 3.3: Метки и параметры, специфичные для разных версий Raspberry Pi
1.3.4 3.4: HAT-платы и дерево устройств
1.3.5 3.5: Поддерживаемые директивы и параметры
1.4 Часть 4. Решение проблем и приемы для профи
1.4.1 4.1: Отладка
1.4.2 4.2: Принудительная загрузка специфического ДУ
1.4.3 4.3: Отключение использования ДУ
1.4.4 4.4: Сокращения и синтаксические вариации
2 См.также
3 Внешние ссылки


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB
[ Time : 0.157s | 17 Queries | GZIP : On ]