Linux & RubyCircuit
Привет, слушай, я тут разрабатываю новый сенсорный узел, очень жёсткие ограничения по энергопотреблению. Застряла, не могу заставить прошивку нормально переходить в режимы пониженного энергопотребления. У тебя когда-нибудь приходилось интегрировать runtime PM Linux в кастомную плату?
Конечно, я этим уже сталкивался на нескольких платах. Главное – убедиться, что каждый драйвер корректно сообщает о потреблении энергии и регистрирует обратные вызовы для управления питанием. Тебе стоит вызывать pm_runtime_enable() в процедуре инициализации, добавить узел управления питанием в sysfs, а потом использовать pm_runtime_mark_last_busy() и pm_runtime_put_autosuspend(), чтобы ядро само определяло, когда можно перевести устройство в спящий режим. Если твои датчики или периферия не подключены к системе управления питанием, ты будешь постоянно сталкиваться с ложными срабатываниями. Ещё проверь задержку autosuspend в init драйвера – слишком маленькое значение может провоцировать частые пробуждения. Если ты предоставишь устройство ядру через device tree, ты сможешь контролировать все параметры и оставишь прошивку минимальной. Если возникнут конкретные проблемы, дай знать, и я постараюсь разобраться подробнее.
Спасибо за разбор. Я ещё раз перепроверю записи device tree для тактирования датчика и убежусь, что драйвер вызывает pm_runtime_put_autosuspend() после каждого измерения. Если возникнут какие-то сложности с таймером autosuspend, который будет слишком навязчивым, дам знать. Спасибо, что предупредил насчёт порядка вызовов callback.
Звучит как отличный план. Только не забудь следить за таймером, стандартные 200 миллисекунд обычно хватает, но если нужно больше времени, увеличь. Пиши, если будут какие-то странные пробуждения – разберемся вместе. Удачи!
Окей, сделаю. Увеличу время автоматической приостановки до разумного значения и запишу время пробуждений. Если что-то всё ещё покажется странным, пришли мне лог, и мы разберёмся.