ericN 3 9 октября Опубликовано 9 октября · Жалоба Вот пример начала 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? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 0 9 октября Опубликовано 9 октября (изменено) · Жалоба On 10/9/2024 at 3:51 PM, ericN said: Я вот xunlong,orangepi-zero2 ни где не встречается. Зачем нужен compatible = "xunlong,orangepi-zero2"? в данном случае просто "шильдик" как на москвичах, а система совместима с процессорами "allwinner,sun50i-h616". Такое и в описании интегрированных контроллеров SoC в *.dtsi часто встречается - шильдик для данной модели процессора и с чем совместимо что описано в драйвере, нет смысла лишнюю информацию в драйвер добавлять. Изменено 9 октября пользователем sasamy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
juvf 18 10 октября Опубликовано 10 октября · Жалоба В 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 - это для разработчика. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
razrab83 21 10 октября Опубликовано 10 октября · Жалоба 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться