LINUX.ORG.RU

Не инициализируется platform driver под Armbian

 ,


0

1

Коллеги, я запутался.

Есть железка, под которую нами портирован OpenWrt. В железке на кристалле есть периферия (NPU, но это неважно), которая инициализируется и работает.

Мы решили портировать на нашу железку Armbian. Взяли ровно то же ядро с теми же патчами, DTB и конфигом. Собрали. Всё работает, NPU - нет.

Отладка показала, что module_drv_init() загружается и отрабатывает. Отрабатывает platform_driver_register(), но коллбек platform_probe() уже не вызывается и нода в /dev не создаётся. При этом, of_match_table содержит корректную и существующую в DTB строку .compatible. Далее, DT-нода со статусом «окей» видна в /sys/firmware, сам драйвер вполне себе виден в /sys/bus/platform и много ещё где. Если что, драйвер вкомпилен в ядро (не модуль)

Отличия между OpenWrt и Armbian:

  • Armbian использует systemd, OpenWRT - свою систему инициализации. Хотя, имхо, это не должно ролять, так как драйвер подгружается ещё до всякого юзерспейса
  • Пришлось поправить конфиг, добавив поддержку initrd и gzip - у нас он не используется, но Armbian без этого не собирается. Ещё для systemd был добавлен CONFIG_INOTIFY_USER. Это потянуло за собой некоторое количество изменений, но на первый взгляд они нерелевантны (дифф могу скинуть)
  • Отличаются версии gcc: Armbian использует arm-linux-gnueabihf-gcc версии 11.4.0, Openwrt - arm-openwrt-linux-muslgnueabi-gcc версии 12.3.0

Проблема кажется очень тупой и очевидной, но я что-то пропустил. Есть идеи, что?