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