СОВРЕМЕННАЯ ЭЛЕКТРОНИКА 2011-1

ПРОГРАММИРОВАНИЕ ходимо установить переменные окру жения загрузчика U Boot для загрузки новой «прошивки». Длячтенияи записи переменныхокруженияU Boot из Linux используются команды fw_printenv и fw_setenv (исходные кодывходят в дист рибутив U Boot). Кроме типичных па раметров, необходимых для запускаОС (расположениеобразаядра вПЗУ, назва ние раздела, содержащего корневую файловуюсистемуидр.), впеременных окружения можно хранить число не удачных загрузок и при достижении определённогопорога возвращатьсяна предыдущее ПО (см. рис. 3). Вариант 2 . При малом объёме ПЗУ ядро Linux и приложения, а также не обходимые библиотеки должны быть скопированы в ОЗУ. После чего может быть проведено стирание и переза пись флэш памяти. Очевидно, данная схема не позволяет вернуться к преды дущей «прошивке» в случае сбоя в про цессе обновления. В загрузчике U Boot реализована встроенная функция проверки целост ности загружаемого образа ядра Linux (управляется переменной verify ), что позволяет ещё до загрузки ОC прове рить её целостность и с помощью hush скриптов определить альтерна тивные источники для загрузки ПО (старая «прошивка» или TFTP) [1]. Рассмотрим способы реализации механизма обновления встроенного ПО в нескольких открытых програм мных проектах, таких как OpenWrt, Openmoko и OpenInkpot. ВпроектепосозданиюсвободногоПО для сетевых маршрутизаторов OpenWrt [2] прошивкаможет обновлятьсяиз веб интерфейсаилипоTFTP.Наиболеепрос тымдляпользователяявляетсяобновле ние ПО через интернет страницу. При этомпользовательпосредствомвеб бра узера заходит на страницу настройки устройства (раздел обновления ПО) и копирует новое ПО с помощью специ альнойHTML формы. Второй вариант получения обновле ний–это загрузкапоTFTP. Такойспособ хорошо подходит для тех пользовате лей, которые самостоятельно создали образ для «прошивки». В случае возник новения проблем они смогут вернуть старую «прошивку» (с помощью TFTP). Процедура происходит следующимоб разом: при включении устройства за пускается загрузчик, которыйвыполня ет инициализацию системы, а также проверяет и загружает исполняемый код. Если «прошивка» не прошла про верку на целостность, загрузчик будет считать её поврежденной и автомати чески перейдёт в режим ожидания за грузки прошивки по сети. После этого пользователь может загружать новую «прошивку» с компьютера по TFTP. При необходимости загрузка ПО с TFTP сервера может быть запущена вручную. При этом необходимо под ключиться к консоли устройства CFE (Common Firmware Environment) по последовательному порту и прервать процедуру обычной инициализации устройства. Далее потребуется скон фигурировать сеть, скопировать но вую «прошивку» с сервера TFTP и за писать её во флэш память устройства. В качестве примера обновления ПО устройства через порт USBможно при вести проект по созданию свободной «прошивки» для смартфонов под на званием Openmoko [3]. Механизм об новления реализован в соответствии со спецификацией USB Device Class Specification for Device Firmware Up grade [4]. Целью данного документа яв ляется создание универсального меха низма обновления ПО устройства, оснащённого портомUSB, т.е. механиз ма, которыйне зависит от производите ля и конкретной аппаратной платфор мы. Это позволяет использовать одну программу в составе ОС для установки встроенного ПО на разные устройства из соответствующих образов «прошив ки». Кроме записи новой «прошивки», упомянутая спецификация описывает процедуру копирования текущей «про шивки» на персональный компьютер. В проекте Openmoko DFU является частьюмодифицированной версии за грузчика U Boot. Также в рамках проек таразрабатывается утилита DFU Util , ко торая позволяет передавать и записы вать ПО во внутреннюю NAND память устройства и записывать программу в его оперативную память. Последняя функция может быть использована для отладки низкоуровневого кода (напри мер, ядра) безперезаписифлэш памяти. Кроме того, предусмотренная в DFU Util возможность считывания содержания NAND памяти позволяет создавать ре зервнуюкопию«прошивки» устройства. Для обновления ПО электронной книги в проекте OpenInkpot использу ется карта памяти SD [5]. С этой целью новое ПО в виде файла с расширением .oifw помещается в корневой каталог SD карты. При подаче питания моди фицированный загрузчик U boot про веряет наличие «прошивки» на карте памяти и проводит проверку её целост ности, используя алгоритмCRC32. При возможности обновления он запраши вает у пользователя подтверждение вы полнения операции перезаписифлэш памяти устройства. Далее происходит обновление ядра и корневой файло вой системылибо полная переустанов ка ПО, включая начальный загрузчик. Следует отметить, что инженеры не ограничиваютсяоднимспособомобнов лениявстроенногоПОустройствнабазе ОС Linux, а реализуют одновременную поддержкунескольких.Этосвязаностем, что при разработке устройства необхо димо иметь инструмент обновления с множеством функций, а при эксплуата ции устройства – максимально надёж ныйипонятный для пользователя. Л ИТЕРАТУРА 1. http://www.denx.de/wiki/DULG/Command LineParsing. 2. http://wiki.openwrt.org/doc/howto/installing. 3. http://wiki.openmoko.org/wiki/USB_DFU. 4. http://www.usb.org/developers/dev class_docs/DFU_1.1.pdf. 5. http://openinkpot.org/wiki/0.2/Installa tionGuide. 67 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 1 2011 Начальный загрузчик Загрузчик второго уровня (U boot) Переменные окружения загрузчика Корневая файловая система Корневая файловая система Прошивка Б Прошивка А Ядро Linux Ядро Linux Рис. 2. Области флэш памяти устройства с возможностью возврата к старой «прошивке» Запуск загрузчика N = N + 1 Проверка числа неудачных запусков N > 3 нет Запуск ОС N = N – 1 Копирование ядра ОС в ОЗУ Возврат к стартовой прошивке да Рис. 3. Алгоритм обновления ПО с возможностью возврата к старой «прошивке» © СТА-ПРЕСС

RkJQdWJsaXNoZXIy MTQ4NjUy