Я планирую разработать миленькое приложение, которое будет работать на основанной на руке встроенной платформе Linux; однако, так как та платформа будет работающей от аккумулятора, я ищу релевантную информацию о том, как обработать питание, сохраняют.
Довольно важно получить достойное время работы от аккумулятора.
Я думаю, что ядро Linux реализовало некоторую поддержку этого, но я не могу найти документацию относительно этого предмета.
Любой вход о том, как разработать мою программу и систему, приветствуется.
Любой вход о том, как ядро Linux пытается, решает этот тип проблемы, также приветствуется.
Другие вопросы:
То, сколько делает программу в пространстве пользователя, должно сделать?
И необходимо ли изменить ядро?
О чем системные вызовы ядра или API хороши для знания?
Обновление:
Кажется, что люди, связанные с сайтом "Свободных электронов", произвели некоторые хорошие презентации этого предмета.
Но возможно у кого-то еще есть еще больше информации об этом предмете?
Обновление:
Кажется, что идея Adam Shiemke пойти посмотреть на проект MeeGo может быть лучшей подсказкой до сих пор.
Это может быть лучший Встроенный проект Linux c батарейным питанием там в данный момент.
И Nokia обычно довольно хороша в этом типе вещи.
Обновление:
Нужно быть осторожным относительно Android, так как он имеет "измененное" ядро Linux в нижней части, и некоторые вещи, которые сделали люди в Google, не используют базовые/нормальные ядра Linux. Я думаю, что некоторые их идеи управления питанием могли быть неприятными к повторному использованию для других проектов.
На самом деле я этого не делал, но у меня есть опыт работы с двумя разными (Linux и встроенное управление питанием). Когда вы думаете об управлении питанием, на ум приходят два основных дистрибутива Linux: Android и MeeGo. MeeGo использует (насколько я могу судить) немодифицированное ядро 2.6 с некоторыми дополнительными функциями. Мне не удалось многое узнать о том, в чем именно заключается их стратегия управления питанием, хотя я подозреваю, что в ближайшем будущем об этом станет больше, по мере того, как продукт приближается к зрелости.
Однако по Android доступно гораздо больше информации. Они запускают довольно сильно модифицированное ядро 2.6. Вы можете увидеть хорошую информацию о различных стратегиях, реализованных в http://elinux.org/Android_Power_Management (а также о драме ядра). Некоторые другие ссылки:
http://www.ok-labs.com/blog/entry/context-switching-in-context/
Я уверен, что вы можете найти больше ссылок такого рода. Поскольку оба проекта имеют открытый исходный код, вы можете взять код ядра и, вероятно, получить дополнительную информацию от людей, которые действительно знают, о чем они говорят, в формах и группах.
На уровне драйвера вы должны убедиться, что ваши драйверы могут правильно обрабатывать приостановку и отключение устройств, которые не используются. Большинство устройств, предназначенных для мобильного рынка, предлагают очень детальную поддержку для отключения отдельных компонентов и настройки параметров часов (помните, что мощность пропорциональна частоте часов ^ 2).
Надеюсь, это поможет.
Вы можете немного сэкономить электроэнергию, не требуя какой-либо специальной поддержки со стороны ОС, если вы пишете (или, по крайней мере, имеете исходный код) свое приложение и драйверы.
Ваши драйверы должны иметь возможность отключать связанные с ними устройства и восстанавливать их, не требуя перезапуска или нестабильности системы. Если ваши устройства подключены к шине PCI / PCIe, выясните, какие состояния питания они поддерживают (D0 - D3) и что нужно сделать вашему драйверу для перехода между этими режимами с низким энергопотреблением. Если вы выбираете аппаратные устройства для использования, ищите устройства, которые соответствуют спецификации управления питанием PCI или имеют аналогичные функции (например, спящий режим и сигнал прерывания «пробуждение»).
Когда ваше устройство загружается, каждое устройство, которое может определить, подключено ли оно к чему-либо, должно это сделать. Если какие-либо порты или шины обнаруживают, что они не используются, выключите их или переведите в спящий режим. Порт, работающий на полную мощность, но бездействующий, может тратить больше энергии, чем вы думаете.В зависимости от вашего конкретного оборудования и варианта использования, также может быть полезно иметь фоновое приложение, которое отслеживает использование устройства, идентифицирует неиспользуемые / бездействующие ресурсы и действует соответствующим образом (например, «хранитель экрана» для вашего оборудования).
Ваше прикладное программное обеспечение должно обязательно определять, включены ли аппаратные устройства, прежде чем пытаться их использовать. Если вам нужен доступ к устройству, которое может быть переведено в режим пониженного энергопотребления, ваше приложение должно иметь возможность обрабатывать потенциально длительную задержку ожидания, пока устройство проснется и ответит. Ваши приложения также должны учитывать потребность устройства в спящем режиме. Если вам нужно отправить серию команд на аппаратное устройство, попробуйте их буферизовать и отправить все сразу, вместо того, чтобы разделять их и требовать нескольких циклов пробуждения-> отправка-> сна.
Не бойтесь немного занизить тактовую частоту компонентов вашей системы. Помимо экономии энергии, это может помочь им работать более прохладно (что требует меньше энергии для охлаждения). Я видел некоторые проекты, в которых используется процессор, который мощнее, чем необходимо, с приличным запасом, который затем занижается на целых 40% (снижая производительность до исходного уровня, но за небольшую часть затрат на электроэнергию) . Кроме того, не бойтесь тратить энергию на ее экономию. То есть не бойтесь использовать аппаратные устройства для мониторинга времени процессора для возможности их отключения / перехода в спящий режим (даже если это заставит ваш процессор потреблять немного больше энергии). В большинстве случаев такой компромисс приводит к чистой экономии энергии.