Подтвердить что ты не робот

Как сделать экономию энергии на встроенной системе на базе ARM?

Я планирую разработать красивое небольшое приложение, которое будет работать на встроенной платформе Linux на основе рук; однако, поскольку эта платформа будет работать от батареи, я ищу соответствующую информацию о том, как справляться с энергосбережением.

Очень важно получить приличное время работы от батареи.

Я думаю, что ядро ​​Linux реализовало некоторую поддержку для этого, но я не могу найти документацию по этому вопросу.

  • Приветствуется любой вклад в проектирование моей программы и системы.

  • Любые данные о том, как ядро ​​Linux пытается решить эту проблему, также приветствуются.

Другие вопросы:

  • Сколько стоит программа в пользовательском пространстве?

  • И вам нужно изменить ядро?

  • Какие системные вызовы или API-интерфейсы хорошо знать?


Обновление:

Кажется, что люди, связанные с сайтом "Свободные электроны", подготовили несколько приятных презентаций по этому вопросу.

Но может быть, у кого-то еще есть еще информация по этому вопросу?


Update:

Кажется, что идея Адама Шиемке, чтобы взглянуть на проект MeeGo, может быть лучшим советом до сих пор.

В настоящий момент это может быть лучший проект Embedded Linux с питанием от батареи.

И Nokia, как правило, хорошо разбирается в этом.


Обновление:

Нужно быть осторожным в отношении Android, поскольку в нем есть "модифицированное" ядро ​​Linux внизу, а некоторые из вещей, которые делали люди в Google, не используют базовые/нормальные ядра Linux. Я думаю, что некоторые из их идей управления питанием могут быть неприятными для повторного использования для других проектов.

4b9b3361

Ответ 1

Я на самом деле не сделал этого, но у меня есть опыт работы с этими двумя подразделениями (Linux и встроенное управление питанием). Есть два основных дистрибутива Linux, которые приходят на ум, когда вы думаете об управлении питанием, Android и MeeGo. MeeGo использует (насколько я могу судить) немодифицированное ядро ​​2.6 с некоторыми дополнениями, зависящими от них. Я не смог найти многого в том, что такое стратегия управления энергопотреблением, хотя я подозреваю, что в ближайшем будущем выйдет о ней больше, поскольку продукт приближается к зрелости.

Однако на Android гораздо больше информации. Они запускают довольно сильно модифицированное ядро ​​2.6. Вы можете увидеть хороший бит в различных стратегиях, реализованных в http://elinux.org/Android_Power_Management (а также в драме ядра). Некоторые другие ссылки:

https://groups.google.com/group/android-kernel/browse_thread/thread/ee356c298276ad00/472613d15af746ea?lnk=raot&pli=1

http://www.ok-labs.com/blog/entry/context-switching-in-context/

Я уверен, что вы можете найти больше ссылок такого рода. Поскольку оба проекта имеют открытый исходный код, вы можете получить код ядра и, возможно, получить дополнительную информацию от людей, которые действительно знают, о чем они говорят в формах и группах.

На уровне драйвера вам необходимо убедиться, что ваши драйверы могут правильно отключить и отключить устройства, которые не используются. Большинство устройств, предназначенных для мобильного рынка, предлагают очень мелкую поддержку для отключения отдельных компонентов и настройки настроек часов (помните, что мощность пропорциональна часам ^ 2).

Надеюсь, что это поможет.

Ответ 2

Вы можете сделать довольно много энергосбережения, не требуя специальной поддержки от ОС, предполагая, что вы пишете (или, по крайней мере, имеете исходный код) для своего приложения и драйверов.

Ваши драйверы должны быть в состоянии отключить связанные с ними устройства и вернуть их обратно, не требуя перезагрузки или введения нестабильности системы. Если ваши устройства подключены к шине PCI/PCIe, изучите, какие состояния питания они поддерживают (D0 - D3), и что ваш драйвер должен сделать для перехода между этими режимами малой мощности. Если вы выбираете аппаратные устройства для использования, ищите устройства, которые придерживаются Спецификации управления питанием PCI или имеют аналогичные функции (такие как спящий режим и сигнал прерывания "пробуждения" ).

Когда ваше устройство загружается, каждое устройство, которое имеет возможность определить, связано ли оно с чем-либо, должно сделать это. Если какие-либо порты или шины обнаруживают, что они не используются, отключите их или спавите. Порт, работающий на полную мощность, но сидящий неиспользуемый, может потерять больше энергии, чем вы могли бы подумать. В зависимости от вашего конкретного оборудования и варианта использования также может быть полезно иметь фоновое приложение, которое отслеживает использование устройства, идентифицирует неиспользуемые/неработающие ресурсы и действует соответствующим образом (например, "экранная заставка" для вашего оборудования).

Ваше прикладное программное обеспечение должно убедиться, что аппаратные устройства включены, прежде чем пытаться их использовать. Если вам нужно получить доступ к устройству, которое может быть размещено в режиме с низким энергопотреблением, ваше приложение должно иметь возможность обрабатывать потенциально длительную задержку в ожидании, когда устройство проснется и ответит. Ваши приложения также должны быть внимательны к устройству, которое нужно спать. Если вам нужно отправить ряд команд на аппаратное устройство, попробуйте их буферизировать и отправить их сразу, вместо того чтобы расстаться с ними и потребовать несколько циклов пробуждения- > отправки- > сна.

Не бойтесь немного подзарядить компоненты системы. Помимо экономии энергии, это может помочь им работать более холодно (что требует меньше энергии для охлаждения). Я видел несколько проектов, которые используют процессор, который является более мощным, чем необходимо, с приемлемой разницей, которая затем отстает на 40% (доведение производительности до исходного уровня, но с небольшим количеством энергозатрат), Кроме того, не бойтесь тратить силы на экономию энергии. То есть, не бойтесь использовать аппаратные устройства мониторинга времени процессора для возможности отключить/спящий режим (даже если это приведет к тому, что ваш процессор будет потреблять немного больше энергии). В большинстве случаев этот компромисс приводит к экономии электроэнергии.

Ответ 3

Это не ваша тема, но это может пригодиться для регистрации вашего прогресса: я искал тестирование/измерение моей встроенной Linux-системы. chris desjardins с этого форума рекомендовал мне это:

Я успешно использовал bootchart в прошлом:

http://elinux.org/Bootchart

Вот список других вещей, которые могут также помочь:

http://elinux.org/Boot_Time