Камрады, приветствую!
Закопался с проблемой.
Есть платформа Khadas VIM3 со сборкой на основе Ubuntu 20.04 и ядром 4.19.241. По MIPI-CSI2 туда подключается камера. Есть приложение, которое читает камеру, жмёт кадры и делает прочую полезную работу. Работает под RT приоритетом (для этого есть причины), активно используется OpenMP, камеру читаем через V4L2 IOCTL интерфейс. Запуск OpenMP ограничен доменами на производительных ядрах (4 штуки из 6). BusyLoop в приложении нет.
Корневая файловая система на eMMC, EXT4 в режиме writeback
, т.е. без журнала.
Так вот, при каких-то стечениях обстоятельств после загрузки после запуска этого приложения некоторые приложения не стартуют с ошибками чтения/загрузки библиотек:
error while loading shared libraries: XXX: unsupported version 0 of Verneed record
error while loading shared libraries: XXX: invalid ELF header
при каждой загрузке библиотека XXX может отличаться, как отличаться и конкретное сообщение об ошибке.
Причём, это может повторяться N раз подряд, а на N+1 загрузку стартанёт нормально и потом может стартовать удачно несколько раз к ряду.
Иногда в серии неудачных загрузок выключить наше приложения и стартануть его уже после всех, то всё стартует и работает нормально. Если же уже всё стало плохо, то ничего не восстановится.
eMMC проверял, вроде, здоровая:
% sudo mmc extcsd read /dev/mmcblk0 | grep 'LIFE\|EOL'
eMMC Life Time Estimation A [EXT_CSD_DEVICE_LIFE_TIME_EST_TYP_A]: 0x01
eMMC Life Time Estimation B [EXT_CSD_DEVICE_LIFE_TIME_EST_TYP_B]: 0x01
eMMC Pre EOL information [EXT_CSD_PRE_EOL_INFO]: 0x01
У меня мозг сломался, что может приводить к такому поведению, как приложение в пользовательском пространстве может поломать в системе что-то лихо так, что потом другие приложения это аффектит.
Однозначно есть какая-то гонка. Но где. В ядре?
Находил схожую проблему, но там был косяк с SquashFS на 6.0 ядрах. Баг в EXT4/драйвере eMMC контроллера?
В общем, если у есть какие-то идеи - велкам!