OpenBLT это загрузчик с открытым исходным кодом для встраиваемых систем. Он позволит Вам и пользователям Ваших устройств на микроконтроллерах обновлять firmware через популярные сетевые интерфейсы и с карты SD. Основное достоинство OpenBLT - открытый код, что позволяет настраивать загрузчик в соответствии с Вашими потребностями.
OpenBLT можно портировать на любой 8-, 16- или 32-разрядный микроконтроллер, и в настоящее время существуют порты на STM32 компании ST, Infineon XMC, NXP S12, TI TM4C и LM3S. По умолчанию поддерживаются коммуникационные интерфейсы RS232, CAN, USB, TCP/IP, и предоставляются утилиты хоста для обновления MicroBoot [3] (GUI) и BootCommander [2] (командная строка). Также поддерживается обновление из файла на карте SD. Есть возможность создать собственную утилиту обновления с использованием OpenBLT host library [4]. Это простая библиотека, поддерживающая несколько языков программирования.
Обратите внимание, что все утилиты хоста (MicroBoot/BootCommander/LibOpenBLT) кроссплатформенные, поддерживаются операционные системы MS Windows и GNU/Linux.
Пакет OpenBLT содержит множество готовых примеров сконфигурированного загрузчика и демо-приложения, предназначенных для популярных плат разработчика. Это значительно упрощает быстрый старт с OpenBLT.
Дополнительную информацию, новости, советы и решения проблем можно найти на следующих каналах:
Исходный код OpenBLT расположен на SourceForge и доступен в репозитории SVN: [https://sourceforge.net/projects/openblt/](https://sourceforge.net/projects/openblt/)
Существует зеркало в репозитории GIT на GitHub: [https://github.com/feaser/openblt/](https://github.com/feaser/openblt/)
OpenBLT предоставляется в 2 версиях лицензирования. Лицензия по умолчанию GNU GPL. Если необходимо интегрировать OpenBLT в свой закрытый проект, то может быть получена коммерческая лицензия. Разработка и поддержка OpenBLT спонсируется Feaser. Эта компания также предоставляет службы интеграции и поддержки, и дополнительные модули.
[Библиотека безопасности]
Поскольку у OpenBLT открытый исходный код, любой желающий может с ними ознакомиться. Обратная сторона такой политики - если кто-то узнает, что в Вашей продукции используется загрузчик OpenBLT, то он может относительно просто разобраться, как обновить firmware в конечном устройстве. Хотя такая возможность может быть особенностью Вашего оборудования, в большинстве случаев это нежелательно.
По этой причине загрузчик OpenBLT содержит модуль безопасности [1] (XCP Seed and Key shared library, SeedNKey), состоящий из начальных данных (seed) и соответствующего ему ключа (key). Если этот модуль безопасности разрешен в конфигурации загрузчика, то обновление могут выполнить только те пользователи, у которых есть корректный алгоритм внутри общей библиотеки Seed/Key. Если это не так, то новые запросы обновления будут отклонены загрузчиком.
Проект SeedNKey изначально сконфигурирован для сборки общей библиотеки Seed/Key. Его реализованный по умолчанию алгоритм Seed/Key работает вместе с алгоритмами, реализованными в демонстрационных загрузчиках OpenBLT. Вы можете использовать эти алгоритмы как основу для своего алгоритма и соответствующим образом модифицировать код модуля безопасности, чтобы он удовлетворял Вашим требованиям по защите.
На стороне загрузчика (программируемый микроконтроллер) этот модуль безопасности разрешается установкой в 1 макроса BOOT_XCP_SEED_KEY_ENABLE, который находится в заголовочном файле конфигурации загрузчика (blt_conf.h). Реализация алгоритма seed/key может быть сделана в hook-функциях XcpGetSeedHook() и XcpVerifyKeyHook().
На стороне хоста (PC) перед обновлением нужно просто указать файл общей DLL-библиотеки, созданный этим предварительно настроенным проектом. В GUI-утилите MicroBoot эта DLL-библиотека указывается в настройках пользовательского интерфейса (кнопка Settings -> закладка Session Protocol -> раздел Security -> надо указать путь до DLL в поле ввода Select your seed/key algorithm shared library file). Для BootCommander это указывается через опцию командной строки.
Дополнительную информацию по XCP Seed and Key shared library, см. на сайте feaser.com, включая пошаговые инструкции по её сборке [1].
Скомпилировал загрузчик OpenBLT для платы Olimex STM32-E407 [5], проект находится в Target\Demo\ARMCM4_STM32F4_Olimex_STM32E407_IAR\Boot\ide\stm32f407.ewp.
Подключение карты к аппаратуре SDIO микроконтроллера STM32F407VGT6:
Карта должна быть отформатирована в системе FAT32.
Расположение загрузчика и прораммы пользователя в памяти микроконтроллера STM32:
Загрузчик и демо-приложение различаются настройками начала кода в области памяти FLASH. Загрузчик начинается с адреса 0x08000000, а приложение, которое запускает загрузчик, с адреса 0x08008000. Таким образом, под загрузчик выделено 32 килобайта памяти.
Компилируются и загрузчик, и демо-приложение одинаково. На карту SD необходимо положить выходной текстовый файл, представляющий двоичный код демо-приложения в формате Motorola S-records (файл с расширением srec, это настраивается в свойствах проекта IAR, раздел Output Converter). Имя выходного файла приложения должно совпадать со строковой константой firmwareFilename загрузчика.