Перейти к содержанию
    

DeviceTree compatible

Вот пример начала dts

 

/dts-v1/;

#include "sun50i-h616-orangepi-zero.dtsi"

/ {
	model = "OrangePi Zero2";
	compatible = "xunlong,orangepi-zero2", "allwinner,sun50i-h616";
};

&battery {
    compatible = "my.company";
	offset-charger = <1900>;
	offset-discharger = <1694>;
	offset-usb-charger = <1685>;
};

Не могу понять некоторые строки. что такое  compatible = "xunlong,orangepi-zero2"? 

Что такое compatible = "my.company" мне понятно и как происходит связка драйвера battery с dtb - мне понятно. Мне не понятно что такое compatible = "xunlong,orangepi-zero2"? Во всем исходном коде это встречается в 2-х местах, это в документации в sunxi.yaml и в sun50i-h616-orangepi-zero2.dts. из sunxi.yaml ядро понимает, что это платформа "Xunlong OrangePi Zero 2". И что? В собраном ядре нет yaml. Т.е. это както во время сборки используется? Мне не понятно как влияет строка   compatible = "xunlong,orangepi-zero2" на поведение или сборку ядра? 

Т.е. при загрузке ядро встречает compatible = "xunlong,orangepi-zero2", по этому сообщению ядро пробегает по списку драйверов  и находит все драйвера с compatible = "xunlong,orangepi-zero2" и выполняет эти драйвера. Потом пробегает по списку драйверов и находит все compatible = "allwinner,sun50i-h616", находит их и выполняет. "xunlong,orangepi-zero2" - инициализирует платформу OrangePiZero2, "allwinner,sun50i-h616" - инициализирует платформу allwinner h616. В исходном коде в *.с я нашел только два места с allwinner,sun50i-h616 - это cpufreq-dt-platdev.c и sun501-cpudfreq-nvmem.c. Из названия файлов более-менее понятно. Я вот xunlong,orangepi-zero2 ни где не встречается. Зачем нужен compatible = "xunlong,orangepi-zero2"? Как эта запись влияет на Linux?
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 10/9/2024 at 3:51 PM, ericN said:

Я вот xunlong,orangepi-zero2 ни где не встречается. Зачем нужен compatible = "xunlong,orangepi-zero2"?

в данном случае просто "шильдик" как на москвичах, а система совместима с процессорами "allwinner,sun50i-h616". Такое и в описании интегрированных контроллеров SoC в *.dtsi часто встречается - шильдик для данной модели процессора и с чем совместимо что описано в драйвере, нет смысла лишнюю информацию в драйвер добавлять.

Изменено пользователем sasamy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 09.10.2024 в 17:51, ericN сказал:

Я вот xunlong,orangepi-zero2 ни где не встречается. Зачем нужен compatible = "xunlong,orangepi-zero2"? Как эта запись влияет на Linux?

строка compatible = "xunlong,orangepi-zero2", "allwinner,sun50i-h616"; говорит, что это плата (платформа, т.е. OrangePi Zero 2) .... к этой плате нужно применить драйвера xunlong,orangepi-zero2 и драйвера allwinner,sun50i-h616. 

Допустим в исходниках есть драйвер, пусть будет myPlata.c в котором есть  compatible = "xunlong,orangepi-zero2". Таких драйверов в исходниках пусть будет 3 шт. И есть два драйвера для процессора allwinner h616. Ядро, встретив в DTB  compatible = "xunlong,orangepi-zero2" пойдет по таблице зарегистрированных драйверов, которые были зарегистрированы макросами при сборке, типа 

static const struct of_device_id my_device_of_match[] = 
{ 
  { .compatible = "xunlong,orangepi-zero2" };
  { /* sentinel */ } 
}; 
MODULE_DEVICE_TABLE(of, my_device_of_match);

и все драйвера, которые соответствуют unlong,orangepi-zero2 - будут активированы. Что-то типа инициализации системы платы.

Потом ядро встретит "allwinner,sun50i-h616" в DTB и также пойдет по таблице драйверов в поиске "allwinner,sun50i-h616". В вашем случае таких драйвера два: cpufreq-dt-platdev.c и sun501-cpudfreq-nvmem.c. Если они были включены в сборку, то они оба активируются (очевидно это инициализация частоты цпу и частоты памяти). Итого у вас будет активировано 5 драйверов (3+2) на старте ядра для инициализации вашей уникальной платы. Не всегда могут присутствовать уникальные драйвера. Например у orangepi zero 2 нет ни чего уникального. У этой платы уникальный процессор H616. Он активируется шильдиком в DTB allwinner,sun50i-h616. В исходниках ядра могут отсутствовать драйвера "xunlong,orangepi-zero2". Ядро просто пропустит "xunlong,orangepi-zero2" и пойдет искать "allwinner,sun50i-h616". Зачем нужен в DTB xunlong,orangepi-zero2, если драйверов нет? Возможно на будущее. Разработчик может в будущем захочет добавить уникальный драйвер для плат xunlong,orangepi-zero2, докинет драйвер - ядро, при старте его подхватит и активирует. 

В sunxi.yaml справка. Если вы задумали разрабатывать свою сборку для OrangePi Zero 2, вы должны найти в sunxi.yaml указание где-то справку, какие compatible должны быть включены в dts платформы. Разработчик аппаратной части OrangePi Zero 2 указал, что нужно включить xunlong,orangepi-zero2 и allwinner,sun50i-h616. 

 - description: Xunlong OrangePi Zero 2
        items:
          - const: xunlong,orangepi-zero2
          - const: allwinner,sun50i-h616

sunxi.yaml - это просто справка. ядро по нему ни чего не понимает. sunxi.yaml не учувствуют ни в сборке, ни в работе ядра. sunxi.yaml - это для разработчика.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, juvf сказал:

sunxi.yaml не учувствуют ни в сборке, ни в работе ядра. sunxi.yaml - это для разработчика.

иногда учавствуют в сборке. Используются для автоматизированной сборки. Существуют специальные инструменты и утилиты, которые проверяют соответствие Device Tree и YAML-документации. Например, есть утилита dt-schema, которая используется для валидации .dts файлов на соответствие описанным в YAML схемам. 
Когда собираешь отдельно ядро, можешь проверить правильность dts командой make dt_binding_check. Эта команда проверит, корректны ли файлы Device Tree с точки зрения схем YAML, описанных в Documentation/devicetree/bindings/. В частности, она проверяет compatible строки, поля и структуру каждого устройства.
Вы можете написать свой скрипт на сборку и сделать там проверки DT на соответствие YAML. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...