Загрузка ПО и микрокода в модули Gemalto «по воздуху»

Опубликовано: 26 декабря 2014 г. в 08:52, 136 просмотровКомментировать

Статья является практическим руководством по загрузке микрокода и/или программного обеспечения, а также его обновления, в модули фирмы Gemalto по радиоканалу.

В нашей жизни присутствует большое количество устройств малой автоматизации. Это торговые автоматы, интеллектуальные счетчики ресурсов (электричества, воды, газа), разнообразные охранные системы, устройства сбора данных (метеостанции, измерители уровня всевозможных газов, загрязненности воздуха и пр.), пока еще экзотические, но уже реально существующие устройства оценки качества вождения авто. Можно упомянуть одну из фирм, присутствующих на российском рынке автострахования, которая предлагает своим клиентам скидки за аккуратное вождение и оценивает стиль водителя устройством, подключаемым к шине OBD2. Общее у этих устройств – наличие канала связи (как правило, используется сотовая связь), развитая аппаратная периферия и возможность загрузки программного обеспечения (ПО) пользователя (мидлеты Java ME) и самое главное – механизм загрузки и обновления как микроПО (firmware), так и программ пользователя (мидлеты) через радиоканал (сотовая связь), или, используя общепринятый термин, «по воздуху» (over air). При этом нет нужды в физическом доступе к устройству, которое может работать где угодно в зоне покрытия сетей сотовой связи. Если речь идет об обновлении большого количества устройств, то и в этом случае механизм загрузки «по воздуху» окажется полезен и позволит заметно снизить расходы на обновление и выполнить задачу в более короткие сроки. Для чего вообще может потребоваться обновление ПО устройств? Причины разнообразны. Вот некоторые из них:

  • Исправление ошибок матобеспечения. Несмотря на серьезные усилия, направленные на выявление и исправление «багов» в ПО, они все равно случаются. Часто бывает так, что какие-то ошибки выявляются только в очень специфических условиях программной и аппаратной конфигурации устройства, а в процессе испытаний и доводки готового изделия эти условия смоделированы не могли быть. У конкретного же потребителя ошибка возникает, и исправлять ее надо.
  • Изменение условий работы устройств. Возможно внезапное изменение законодательства, или правительство вдруг решит отменить переход на зимнее/летнее время. Заранее предусмотреть такие вещи невозможно.
  • Выпуск устройств с разной функциональностью и возможностью посредством ПО эту функциональность изменять. Например, пользователь купил устройство с некоторыми базовыми функциями, и на этапе покупки данный прибор полностью удовлетворял потребностям его бизнеса. Но по мере развития бизнеса базовых возможностей стало не хватать, пользователь решил потратить деньги на нужную ему дополнительную функциональность. В этом случае ему не надо покупать новые устройства, менять всю инфраструктуру, тратить ресурсы на покупку нового и утилизацию старого оборудования, обучение персонала и т. п. Таким образом, значительно снижается стоимость владения (total cost of ownership).

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

Механизмы загрузки ПО в модулях Gemalto

В практических примерах мы будем использовать Cinterion concept board, содержащую на борту модуль EHS6 с сотовым модемом, антенну и разнообразную периферию. Серьезным конкурентным преимуществом этого и других модулей Gemalto является серьезный объем flash-памяти на борту. Для EHS6 объем оперативной памяти составляет 6 Mбайт, а объем памяти в файловой системе – 10 Mбайт. Этот объем позволяет выполнять все операции загрузки как микрокода, так и программ пользователя без установки какой-либо дополнительной памяти, что существенно снижает стоимость устройств на базе модулей Gemalto, упрощает разработку, уменьшает сроки изготовления. Следует упомянуть, что модули поставляются без программы FOTA, и конечный потребитель должен самостоятельно произвести загрузку мидлета для включения этого режима. Gemalto предоставляет ПО и подробные инструкции для выполнения этой задачи. На готовой макетной платe Cinterion Concept Board, которую мы использовали для выполнения практических примеров (они приведены в конце статьи), уже установлены все необходимые мидлеты.

Существует два механизма для загрузки ПО. Первый называется FOTA (Firmware Over The Air), второй – OTAP (Over The Air Provisioning of Java applications). FOTA предназначен для обновления микрокода устройства, OTAP – для установки/обновления/удаления Java ME-мидлетов.

FOTA

Механизм FOTA устроен следующим образом: на первом этапе производится загрузка нового ПО во flash-память модуля, а на втором этапе ПО заменяется.

Загрузка состоит из следующих шагов:

  • запуск команды модулю на обновление ПО;
  • загрузка обновленного JRC-мидлета во flash-память модуля (Flash File System, FFS);
  • загрузка обновленного ПО (микрокода) во flash-память модуля;
  • проверка целостности загруженных файлов;
  • остановка и удаление текущего JRC-мидлета;
  • запуск обновления микрокода (firmware);
  • установка загруженного JRC-мидлета;
  • проверка обновления и возобновление нормальной работы.

Эти шаги могут быть выполнены АТ-командами от внешнего приложения. Также обновление может быть выполнено отдельным модулем обновления микрокода, который может быть загружен по радиоканалу («по воздуху»).

Для выполнения обновления нужен, во-первых, сервер, на котором могут быть размещены файлы для загрузки, например, http(s), ftp или socket-соединение. Во-вторых, следует предусмотреть, чтобы было достаточно места в FFS для загрузки файлов. В-третьих, нужна коммуникационная инфраструктура для запуска процесса обновления, отслеживания процесса сбора отчетов обновленных устройств (device management server).

Детальное описание процесса FOTA:

  • Команда модулю на запуск обновления. Запуск обновления микрокода может быть инициирован, например, командой по IP-соединению или SMS, в зависимости от используемой коммуникационной инфраструктуры. Если коммуникационный сервер есть, можно использовать его для старта обновления. Рекомендуется максимально детализировать команду на обновление – включать в нее URL-загрузки и контрольные суммы для проверки целостности загруженных файлов.
  • Загрузка обновленного JRC-мидлета в файловую систему модуля (FFS). JRC-мидлет, соответствующий обновленному микрокоду (например, JRC1.50.6.jad и JRC-1.50.6.jar), должен быть загружен в корневую директорию FFS («А:») с использованием FileConnection в режиме WRITE ONLY.
  • Загрузка обновления микрокода в файловую систему модуля. Файл обновления микрокода должен быть загружен и сохранен как Sam_6260.usf в корневой директории FFS («А:»). Этот файл является частью специального пакета с микрокодом и предоставляется Gemalto M2M GmbH. Он содержит обновление микрокода (до 7 Мбайт) в зашифрованном формате и защищен контрольной суммой.

Работа с FFS

Flash-память модуля активно используется при выполнении процедур загрузки и обновления как микрокода, так и ПО пользователя. Полезно иметь возможность работать с содержимым этой памяти и при выполнении операций FOTA и OTAP. Как минимум, надо убедиться, что места достаточно для нормальной работы механизмов обновления.

Во время установки матобеспечения для работы с модулем также устанавливается Module Exchange Suite (программа обмена с модулем). Работа с модулем возможна в двух режимах: командной строки или стандартного проводника Windows.

При использовании проводника Windows на верхнем уровне появляется объект Module. По умолчанию объект не подключен к модулю EHS6, и при попытке открыть Module получим ошибку (рис. 1).

Рис. 1. Сообщение об ошибке при попытке открыть Module

Надо указать явно, через какой порт подключить модуль. Для этого правой клавишей мыши включаем свойства и выбираем один из портов модуля EHS6 (рис. ). После этого модуль будет открываться.

Модули для работы в режиме командной строки располагаются в директории C:\Program Files\Cinterion\Module Exchange Suite (рис. 3).

Рис. 2. Окна выбора порта модуля EHS6

Комментарий специалиста

zagruzka_po_i_mikrokoda_v_moduli_gemalto_2Иван Гончаров, инженер по внедрению холдинга PT Electronics, ivan.goncharov@ptelectronics.ru

Модули со встроенной Java расширяют функционал устройства, делая его практически автономным.

Это очень удобно для устройств, которые находятся на значительном удалении от населенных пунктов или местах с ограниченным или затрудненным доступом. Такая опция как FOTA позволяет удаленного обновлять прошивку модуля, если это необходимо, а также обновлять Java приложения или добавлять новые, тем самым позволяя экономить на сервисном обслуживании устройства заказчика.

Можно запустить командную строку и выполнить команду «показать содержимое» и проверить работу команды установки порта для обмена с модулем (рис. 4, 5).

Макетная плата Gemalto должна быть подключена и активирована нажатием кнопки Ignition. Для подключения можно использовать любой из USB-портов платы. Для работы вышеописанных утилит обмена необходимо, чтобы модуль был в нормальном режиме и скорость обмена была зафиксирована в диапазонах 921600/460800/230400/115200/57600/38400/19200.

Обмен с модулем с использованием этих утилит сбрасывает установки АТ-команд к заводским установкам по умолчанию по аналогии с выполнением команды AT&F.; Если какие-либо пользовательские профили были запомнены в энергонезависимой памяти командой AT&W;, то их надо восстановить после команды ATZ.

При работе с файловой системой следует учитывать ограничение в 200 объектов (файлов, директорий) и не превышать его.

Вопросы безопасности

При работе с MES (Module Exchange Suite) serial-интерфейс должен быть механически защищен. Правила безопасности для приложений Java запрещают открытие, чтение, копирование, перемещение или переименование JAR-файлов. Также не рекомендуется использовать имя приложения для директории, так как защита запретит открыть, скопировать или переименовать такую директорию.

При работе с передачей «по воздуху» нужно, во-первых, использовать пароль при обновлении через OTA (SMS Authentication). Во-вторых, параметры следует устанавливать фиксированными везде, где только возможно, чтобы их нельзя было поменять «по воздуху» (см. команду AT^SJOTAP). В-третьих, HTTP-сервер должен обеспечивать безопасный доступ посредством базовой идентификации. И, наконец, следует убедиться, что OTAP-сервер не добавляет пробелов к именам JAR- и JAD-файлов, потому что это вызовет проблемы с передачей.

OTAP

Механизм OTAP, рассматриваемый в статье, не требует какого-либо физического доступа пользователя к устройству, передача полностью управляется извне. Это очень важное свойство таких устройств. Механизм удаленного управления можно применять в торговых автоматах, приборах учета электроэнергии, воды, тепла (интеллектуальные счетчики) и т. д.

Схема работы OTAP

Для использования OTAP потребуется, помимо собственно модуля c Java ME, сервер хранения Java-приложений (HTTP(S)-сервер), доступный по TCP/IP-соединению, а также устройство посылки SMS, способное отправлять сообщения с параметрами CLASS1 и PID $7d. Этот PID зарезервирован для запуска загрузки данных модулем.

HTTP(S)-сервер содержит файлы типов .jar и .jad для передачи на устройство. Доступ к этим файлам может быть защищен базовой аутентификацией HTTP.

Контроллер OTAP (устройство посылки SMS) контролирует операцию OTAP. Он посылает короткое сообщение (с дополнительными параметрами или без них) устройствам, которыми требуется управлять. Эти устройства пробуют установить соединение с HTTP-сервером и загрузить новое приложение с него. Контроллер OTAP не может получить отчета о результате процедуры загрузки. Чтобы получить отчет об успешности (неуспешности) этого действия, надо предусмотреть в программе посылку информации через HTTP и обеспечить прием этой информации на сервере.

В OTAP предусмотрено два типа операций:

  • Установка/обновление: новые JAR и JAD загружаются и устанавливаются.
  • Удаление: удаляются JAR-, JAD-файлы и все файлы данных этого приложения.
Рис. 6. Схема работы OTAP

Обратите внимание: короткое сообщение должно содержать поле TP-PID, отличное от 0 по умолчанию и равное $7D. Послать такое сообщение просто с телефона не получится! Для формирования такого сообщения надо использовать режим PDU, в котором можно явно указать параметр TP-PID. Хорошее, понятное описание способа формирования SMS в режиме PDU можно прочитать, например, здесь: hardisoft.ru

Если устройство должно работать в нестандартных сетях сотовой связи, не поддерживающих передачу PID, или по каким-то причинам нет возможности формировать полноценные сообщения, то можно отключить проверку этих параметров командой AT. Тогда можно использовать сообщения c Class0 и/или TP-PID 0. Скажем, можно будет активировать загрузку мидлета, просто послав SMS с телефона.

Параметры OTAP

В этом пункте описан набор параметров для управления функциями OTAP. Эти параметры могут быть установлены либо AT-командами (AT^SJOTAP) на этапе разработки устройства, либо короткими сообщениями на этапе эксплуатации устройства. Установка параметров АТ-командой имеет приоритет и не может быть изменена коротким сообщением. Список параметров приведен в Приложении 1.

Нижеследующие параметры могут быть установлены только посредством АТ-команд:

  • SM password используется для идентификации входящих OTAP SMS. Установка этого пароля повышает уровень безопасности. Если АТ-командой пароль установлен, то он должен содержаться в SMS.
  • Игнорировать параметр TP-PID во входящем SMS. При включении этой опции PID принятого короткого сообщения проверяться не будет.
  • Спрятать параметры HTTP идентификации. Установка этого параметра позволит скрыть логин–пароль в команде чтения установок AT^SJOTAP и листинге OTAP.

Длина строковых параметров в АТ-команде ограничена (см. табл. в Приложении 1), при передаче коротким сообщением длина строковых параметров ограничена только общей допустимой длиной короткого сообщения. «Необязательный/P» означает, что эти параметры нужны, только если требуется получить диагностику командой POST на сервер.

Сервер коротких сообщений должен формировать сообщения в формате SUBMIT PDU с Class1 PID $7D и кодированием 7 или 8 бит. Для нестандартных сетей возможно использование сообщений Class0 и/или PID $00. Чтобы модуль принимал и правильно обрабатывал такие сообщения, в нем предварительно должна быть включена такая возможность АТ-командой.

Короткое сообщение формируется из набора ключевых слов и параметров, представленных в формате ASCII. Параметры можно передавать несколькими сообщениями, но только в последнем должно быть ключевое слово «START» для запуска процедуры OTAP. Если один и тот же параметр присутствует в нескольких сообщениях, модуль использует только последнее значение.

Рассмотрим несколько примеров.

Процедура установки, первое сообщение:

OTAP_IMPNG

PWD:secret

JADURL:http://www.greatcompany.

com/coolapps/mega.jad

HTTPUSER:user

HTTPPWD:anothersecret

Процедура установки, второе сообщение:

OTAP_IMPNG

PWD:secret

BEARER:gprs

APNORNUM:access.to-thenet.net

NETUSER:nobody

NETPWD:nothing

DNS:192.168.1.2

START:install

Пример операции удаления:

OTAP_IMPNG

PWD:secret

JADURL:http://www.greatcompany.com/coolapps/mega.jad

START:delete

Первая строка обязательна, она позволяет распознать сообщение как команду OTAP. Остальные строки опциональны, порядок тоже неважен. Каждая строка должна заканчиваться кодом перевода строки (LF или $0A или \n), включая последнюю строку. Ключевые слова чувствительны к регистру и должны быть заглавными. Двоеточие отделяет параметр от ключевого слова.

Значения «BEARER» и «START» используются внутри и должны быть строчными буквами. Пароль (параметр PWD) чувствителен к регистру букв. Для остальных параметров чувствительность к регистру определяется особенностями сервера или сети.

Обычно все параметры не удается уместить в одно сообщение. При разделении на несколько сообщений каждое должно содержать в первой строке ключевое слово «OTAP_IMPNG» и параметр «PWD», если был включен запрос пароля.

Механизм OTAP запускается, если в сообщении обнаружено ключевое слово «START» и на этот момент набор параметров содержит формально допустимые данные. После выполнения процедуры OTAP модуль перезагружается, вне зависимости от успешности операции, ошибки или срабатывания таймера безопасности. Также это означает, что все параметры, установленные посредством коротких сообщений, будут забыты.

Ключевое слово «START» может сопровождаться параметром «install», «delete». По умолчанию применяется параметр «install».

Сотовая сеть не гарантирует правильный порядок доставки коротких сообщений. Поэтому может обнаружиться неприятная ситуация, когда запуск операции OTAP произошел до получения всех параметров. Для минимизации этой проблемы можно передавать сообщения с интервалом в несколько секунд или несколько десятков секунд.

Механизм OTAP реализован как системный слушатель коротких сообщений, что означает, что OTAP не генерирует подтверждений и не удаляет сообщений. Поэтому OTAP-сообщения надо обрабатывать так же, как и все другие. Пользовательская программа должна также заботиться о своевременном удалении сообщений и следить за наличием свободного места в памяти сообщений.

Формат файлов Java для передачи по OTAP

Все Java-файлы должны соответствовать спецификациям IMP-NG и ME. Ниже перечислены компоненты JAD-файла, на которые следует обратить особое внимание при использовании OTAP:

  • MIDlet-Jar-URL: убедитесь, что этот параметр указывает на место в сети с актуальным JAR-файлом, например, 192.168.1.3/datafiles/mytest.jar (или просто mytest. jar, если URL JAD-файла указывает на то же место). В противном случае такой JAD-файл бесполезен для OTAP.
  • MIDlet-Install-Notify: этот необязательный параметр указывает на место, куда следует записать результаты операции установки или обновления. Указание этого места – единственный способ получить обратную связь по результатам операции установки или обновления. Формат этого URL должен соответствовать спецификации IMP-NG OTA. В противоположность файлам JAR и JAD, это место не должно быть защищено паролем.
  • MIDlet-Delete-Notify: этот необязательный параметр указывает на место, куда следует записать результаты операции удаления. Указание этого места – единственный способ получить обратную связь по результатам операции удаления. Формат этого URL должен соответствовать спецификации IMP-NG OTA. В противоположность файлам JAR и JAD, это место не должно быть защищено парольным входом.
  • MIDlet-Name, MIDlet-Version, MIDlet-Vendor: это обязательные поля в JAD- и Manifest-файлах. Оба файла должны содержать одинаковые параметры, иначе будет получен код ошибки 905.
  • MIDlet-Jar-Size: этот параметр должен содержать правильный размер JAR-файла, иначе будет получен код ошибки 904.

Примеры JAD- и Manifest-файла приведены в Приложении 2.

Процедуры OTAP

Процедура установки/обновления (рис. 7).
Если модуль получает короткое сообщение с ключевым словом «START:install» и набор параметров в этот момент формально правилен, то модуль всегда перезагружается либо по выполнению операции, либо по ошибке, либо по срабатыванию таймера безопасности. Если в процессе выполнения обновления имела место ошибка, старое приложение остается нетронутым.

Процедура удаления (рис. 8).

Если модуль получает короткое сообщение с ключевым словом «START:delete» и набор параметров в этот момент формально правилен, то модуль всегда перезагружается либо по выполнению операции, либо по ошибке, либо по срабатыванию таймера безопасности. Если в процессе выполнения удаления имела место ошибка, старое приложение остается нетронутым.

Все HTTP-пакеты, посылаемые модулем, содержат номер IMEI в поле User-agent, например:

User-Agent: /000012345678903 Profile/IMP-NG Configuration/CLDC-1.1

Это облегчает идентификацию информации на HTTP-сервере.

В режиме OTAP необходимо использовать пароль на короткие сообщения, поскольку иначе команда удаления сможет удалять директории целиком без какой-либо страховки.

Особенности выполнения процедур приведены в Приложении 3.

Процедуру OTAP можно использовать для дистанционной перезагрузки устройства. Для этого следует запустить процедуру OTAP с параметром, который ничего не будет делать (например, удаление несуществующей директории). Если вы почему-либо не хотите запускать процедуру OTAP посредством короткого сообщения, используйте АТ-команду AT^SJOTAP. Она запустит процедуру установки/обновления без короткого сообщения. Примите во внимание, что если так будет загружено неверно работающее приложение, то последующее обновление все равно потребует короткого сообщения.

Процедуру OTAP нельзя запустить в отладчике. Для работы OTAP модулю нужно подключение к сети. Это означает, что-либо Java-приложение должно обеспечить ввод правильного PIN в SIM-карту, либо запрос PIN должен быть отключен.

Пошаговое отслеживание процедуры OTAP

Для отладки сценариев OTAP их можно протрассировать через serial-интерфейс. Вывод будет содержать детали процедуры OTAP и использованные параметры. Для включения режима трассировки используйте АТ-команду AT^SCFG, например AT^SCFG=”Trace/Syslog/OTAP,1.

Serial-интерфейс после такой команды будет эксклюзивно выделен только для логгирования событий OTAP. Вся другая обычная активность по этому интерфейсу (АТ-команды или CommConnection и System.out в Java) будет невозможна, пока будет работать логгер.

Этот режим предназначен только для режима отладки. Его не следует использовать в штатном режиме работы модуля.

Режим безопасности для приложений Java влияет и на процедуры OTAP. Если модуль переключен в режим безопасности, то подпись мидлета учитывается и в процедуре OTAP. Это означает невозможность:

  • заменить подписанную версию мидлета неподписанной (такая попытка приведет к ошибке с кодом 910);
  • установить мидлет с подписью, не соответствующей сертификату модуля (ошибка 909).

Для безопасности прием OTAP-сообщений запрещен по умолчанию.

Для включения слежения за OTAP-сообщениями надо выполнить установочную команду AT^SJOTAPхотя бы один раз. Это предотвращает ненамеренное использование модуля в открытом режиме, например, если модуль используется без Java-мидлетов.

Тонкости использования OTAP и пошаговые инструкции приведены в Приложении 4.

АТ-команды управления ПО в модуле

Команда AT^SJAM предназначена для управления Java-мидлетами. Она имеет два режима: тестовый и исполнительный.

Тестовый режим:

AT^SJAM=?

^SJAM: (0–5), (275), (8)

Первая строка дает информацию о поддерживаемых действиях. Первый параметр в скобках означает, что поддерживаются режимы 0–5; параметр 275 – максимальная длина URL-мидлета; 8 – максимальная длина пароля.

В исполнительном режиме значения первого параметра:

  • «0» – установить мидлет с указанным URL;
  • «1» – запустить мидлет с указанным URL;
  • «2» – остановить мидлет с указанным URL;
  • «3» – удалить мидлет с указанным URL;
  • «4» – вывести список установленных мидлетов;
  • «5» – вывести список работающих мидлетов.

На рис. 9 приведен результат выполнения команд «4» и «5».

Вывод команды «4» содержит следующие значения:

  • URL мидлета;
  • имя мидлета;
  • имя вендора;
  • версия;
  • автозапуск;
  • количество места в байтах, занятое мидлетом в FFS;
  • количество места в байтах, занятое данными мидлета в FFS.

Автозапуск может принимать значения «0» или «1». Если для конкретного мидлета этот параметр установлен в «1» и глобальной командой AT^SCFG«Userware/ Autostart» разрешен автозапуск мидлетов, то этот мидлет начнет работать после запуска модуля.

Вывод команды «5» содержит следующие значения:

  • URL мидлета;
  • имя мидлета;
  • имя вендора;
  • версия;
  • автозапуск.

Проверим текущую конфигурацию модуля командой AT^SCFG? (рис. 10).

Практическая демонстрация работы OTAP приведена в Приложении 5.

Итак, мы рассмотрели механизмы управления «по воздуху» программами пользователя на Java ME и микрокодом модулей Cinterion.

Автор статьи: Сергей ДРОНСКИЙ
Опубликовано в журнале «Вестник Электроники» №4 2014

Контакты:

Ф.И.О. Блохина Екатерина  нет отзывов
Компания: «PT Electronics»
Страна:  Россия
Телефон: +7 (812) 324-63-50
Сообщите, что нашли информацию на сайте «Элек.ру»
Web: http://ptelectronics.ru/
Зарегистрирована: 11 августа 2014 г.
Последний раз была на сайте 4 дня назад
  Отправить сообщение

Рекомендуем почитать

Комментировать

    Еще никто не оставил комментариев.

Для того чтобы оставлять комментарии Вам необходимо зарегистрироваться либо авторизоваться на сайте.