СОВРЕМЕННАЯ ЭЛЕКТРОНИКА 2011-1
Тема обновления встроенного про граммного обеспечения (firmware, или «прошивки») актуальна для многих уст ройств, начиная сбытовойэлектроники и заканчивая блоками промышленных систем. Дляпользовательскихустройств весьмаполезна встроеннаяфункцияоб новления ПО. Так, в случае обнаруже ния программных ошибок в уже выпу щенной и реализованной партии уст ройствпроизводительможетисправить их без возврата партиинафабрику. Это делается следующимобразом: наинтер нет странице продукта размещается новая «прошивка», которуюпользовате ли могут установить самостоятельно. ОбновлениеПОпромышленнойэлек троники имеет свои особенности, по скольку необходимые блокимогут быть установлены на удалённых объектах. Это затрудняет непосредственное под ключение и приводит к транспортным затратам. Безусловно, для всех типов устройств ключевым и обязательным требованием является безопасность за мены ПО. Пользователи предпочтут работать со старой программой, столк нувшись с высоким риском неудачно го обновления. Впоследнее времянарынке встраива емыхсистемсформировалосьнесколько тенденций. Во первых, следуетотметить рост популярности ОС Linux. Широкое применение этой операционной систе мыобусловленопоявлениемновыхмик ропроцессоров, обладающих достаточ ной производительностью для работы ПРОГРАММИРОВАНИЕ 66 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 1 2011 Embedded Linux: методы безопасного обновления встроенного программного обеспечения Виктор Полстюк (Минск, Беларусь) В статье рассмотрены методы безопасного обновления встроенного программного обеспечения устройств на базе Embedded Linux, а также особенности реализации этой процедуры в проектах OpenWrt, Openmoko и OpenInkpot. на базе Linux при сохранении невысо кой стоимости и энергопотребления (что типично для микроконтроллеров). Также использование Linux позволяет сократить время разработки устройства за счёт использования программного обеспечения со свободной лицензией. Второй заметной тенденцией стало стремление к постоянному развитию продукта даже после его продажи. Так, производители электроники разраба тывают новое программное обеспече ние для ранее выпущенных устройств, предоставляя возможность пользова телям самостоятельно обновить «про шивку» и таким образом добавить но вый функционал. Сегодня возможность обновления программного обеспечения электрон ногоустройствапревратиласьиз допол нительного преимущества в обязатель ное требование. Безусловно, распрост ранение Linux повлияло и на развитие способов обновления встроенной про граммы. Поэтому целью данной статьи является описаниемеханизма обновле ния прошивкина основеОС Linux ине скольких примеров его реализации. Рассмотримразделыпамятисистемы (см. рис. 1) и те части памяти, которые необходимообновлятьприпереходена новую версию ПО. Как правило, систе мы на базе Linux имеют следующую структуру энергонезависимой памяти: в первом её разделе хранится програм ма – загрузчик ядра Linux, которая, в своюочередь, может выполняться в не сколько этапов. Например, начальный загрузчик малого размера копируется во внутреннюю память процессора, проводит инициализацию внешнего ОЗУ и копирует в него загрузчик второ го уровня. Загрузчик второго уровня (например, U Boot) копирует ядроLinux в ОЗУ и передаёт ему управление. В по следнюю очередь происходит запуск пользовательских приложений, разме щённых в последнем разделе флэш па мяти. Таким образом, становится оче виднойнеобходимостьобновленияраз дела памяти с пользовательскими при ложениями и раздела с ядромОС. Событиями для запуска процесса об новления ПО могут служить: ● запуск системы (в этом случае про грамма обновления встраивается в начальный загрузчик либо запуска ется при инициализации ОС); ● подключение внешнего носителя (USB или SD карты) во время рабо ты устройства; ● обнаружение на сервере обновления ПО более новой версии; ● действия пользователя. Файлы для обновления могут быть скопированы при использовании под ключаемыхносителейинформациили бополученыпосети(приналичиивсис теме порта Ethernet или модуля Wi Fi). Какправило, с этойцельюиспользуется протокол TFTP, поддерживаемый раз личными загрузчиками. В случае, когда обновлением ПО занимается запущен наявОСпрограмма, копированиенеоб ходимыхфайловссервераможетпроис ходить спомощьюприложения wget ли босиспользованиембиблиотеки libcurl . Важным моментом процедуры об новления ПО является проверка вер сии полученных файлов и их целост ности. Для этого могут быть использо ваны такие алгоритмы, какMD5, CRC32 и др. Также желательно проверять сов местимость новой «прошивки» с дан ным устройством (версией печатной платы, элементной базы и т.п.). Когдафайлыдля обновления получе ны и проверены, можно переходить к процессу их записи в ПЗУ системы. В зависимостиот объёмаПЗУреализуют ся различные схемы обновления ПО. Вариант 1 . Если используется ПЗУ с объёмом, достаточным для хранения старой и новой «прошивок» (см. рис. 2), реализуется схема с возможностьювоз врата кпредыдущейверсииПОв случае неудачно завершившегося процесса обновления. Непосредственно переза письпамятиосуществляется спомощью программ flash_eraseall (для стирания области памяти) и nandwrite (для запи сиобраза вNAND память), которые вхо дят в состав пакета mtd utils . Далее необ Начальный загрузчик Загрузчик второго уровня (U boot) Переменные окружения загрузчика Корневая файловая система Обновляемая часть Ядро Linux Рис. 1. Области флэш#памяти устройства на базе ОС Linux © СТА-ПРЕСС
Made with FlippingBook
RkJQdWJsaXNoZXIy MTQ4NjUy