1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/spunky_973-rt-fota

Клонировать/Скачать
README.md 18 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 02:41 ebb0fe5

Основываясь на STM32, открытая загрузочная среда — RT-FOTA

Введение

RT-Thread официально представил универсальный загрузчик для серии микроконтроллеров STM32. На веб-сайте можно создать файл записи загрузчика с помощью веб-конфигурации, что позволяет инженерам встраиваемых систем легко создавать функции загрузчика для своих продуктов без необходимости писать код. Однако, поскольку официальный загрузчик RT-Thread, RT-OTA, является коммерческим и не имеет открытого исходного кода, это ограничивает его переносимость на другие платформы и затрудняет добавление специфических функций в продукт.

Хотя мои навыки программирования ограничены, я решил создать открытый исходный код и универсальную среду загрузчика на основе системы RT-Thread в качестве хобби, чтобы внести свой вклад в сообщество. Я назвал этот проект RT-FOTA, вдохновлённый RT-Thread.

Анализ требований к RT-FOTA:

  1. Разработка среды загрузчика, основанной на RTOS. Многие эксперты рекомендуют разрабатывать загрузчики как голые металлические программы, такие как u-boot, для обеспечения стабильности и надёжности. Однако я считаю, что ресурсы 32-битных микроконтроллеров богаты, а стабильность и надёжность RT-Thread хорошо известны, плюс богатый набор компонентов RT-Thread облегчает расширение функциональности (например, добавление сетевых и USB-функций). Поэтому я использую урезанную версию RT-Thread под названием rtt-nano.

  2. Совместимость с официальными файлами RBL от RT-Thread: использование официального инструмента упаковки RT-Thread для создания файлов загрузки обеспечивает функции шифрования и сжатия. Из-за моих ограниченных навыков я могу только обеспечить максимальную совместимость, например, я не знаю, как вычислить HASH_CODE в файлах RBL.

  3. Простота переноса: поскольку RT-FOTA основан на RT-Thread, он может быть легко перенесён на любую платформу, поддерживаемую RT-Thread.

Основные функции RT-FOTA:

  • Поддержка официальных файлов RBL RT-Thread и их использования. В настоящее время поддерживается CRC32, AES256, quicklz и fastlz.
  • Поддержка режима командной строки (с использованием компонента FINSH) и восстановления заводских настроек.
  • Поддержка разделов FLASH (компонент FAL).
  • Поддержка расширения функциональности через компоненты RT-Thread.
  • Другие функции могут быть легко расширены.

Структура разработки программного обеспечения

Структура разработки программного обеспечения следует структуре каталогов RT-Thread. Хотя я изначально планировал использовать SCONS для компиляции, но из-за отсутствия опыта работы с SCONS, я временно использую MDK для завершения проекта.

Конфигурация программного обеспечения

Конфигурация RT-FOTA по-прежнему сосредоточена в файле rtconfig.h, который содержит определения конфигурации для RT-Thread. Некоторые файлы .c имеют предопределённые макросы конфигурации, которые можно настроить в соответствии с требованиями. Драйверы оборудования Config

#define SOC_FAMILY_STM32
#define SOC_SERIES_STM32F4
#define SOC_STM32F407ZE

/* На чипе периферийные драйверы */
#define BSP_USING_GPIO
#define BSP_USING_ON_CHIP_FLASH
#define BSP_USING_ONCHIP_RTC
#define BSP_USING_UART
#define BSP_USING_UART1
#define BSP_USING_SPI
#define BSP_USING_SPI1

/* Встроенные периферийные драйверы */
#define BSP_DATAFALSH_CS_PIN 30

/* Расширенные модули драйверов платы */
#define BSP_RS485_DIR_PIN 52

/* Определение модуля RT-FOTA */
#define RT_FOTA_SW_VERSION      "1.0.0"

/* Включить Ymodem OTA */
#define PKG_USING_YMODEM_OTA

/* Имя раздела можно настроить в соответствии с вашими потребностями */
/* FOTA приложение имя раздела */
#ifndef RT_FOTA_APP_PART_NAME
#define RT_FOTA_APP_PART_NAME   "app"
#endif
/* FOTA загрузка имени раздела */
#ifndef RT_FOTA_FM_PART_NAME
#define RT_FOTA_FM_PART_NAME    "fm_area"
#endif
/* FOTA по умолчанию имя раздела */
#ifndef RT_FOTA_DF_PART_NAME
#define RT_FOTA_DF_PART_NAME    "df_area"
#endif

/* Эти два пароля должны совпадать с настройками программного обеспечения упаковки RTT */
/* Вариант алгоритма шифрования AES256 */
#define RT_FOTA_ALGO_AES_IV     "0123456789ABCDEF"
#define RT_FOTA_ALGO_AES_KEY    "0123456789ABCDEF0123456789ABCDEF"
#endif

Описание файла RBL

Те, кто использовал официальный компонент RT-OTA от RTT, знают, что загружаемый файл не является bin-файлом, а должен быть «оформлен» с помощью программного обеспечения для упаковки RTT и превращён в файл rbl, чтобы его мог распознать RT-OTA.

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

rt-fota />fota show fm_area 0 96 00000000: 52 42 4C 00 00 02 00 00 5E A9 A4 5D 61 70 70 00 00000010: 00 00 00 00 00 00 00 00 00 00 00 00 31 2E 30 2E 00000020: 36 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000030: 00 00 00 00 31 2E 30 2E 36 00 00 00 00 00 00 00 00000040: 00 00 00 00 00 00 00 00 00 00 00 00 43 33 29 0A 00000050: 47 08 F6 DA 84 BB 00 00 1C 84 00 00 C4 3D E3 B5

Его конкретное значение следующее:

typedef struct { char type[4]; /* RBL символ заголовка / rt_uint16_t fota_algo; / конфигурация алгоритма: указывает, используется ли шифрование или алгоритм сжатия / rt_uint8_t fm_time[6]; / время исходного bin файла, 6-битное время, использующее 4 байта, включая информацию о годе, месяце и дне / char app_part_name[16]; / имя исполняемого раздела приложения / char download_version[24]; / номер версии встроенного ПО / char current_version[24]; / эта область одинакова в файле rbl при создании, я использую её для представления текущей версии приложения в разделе приложения, чтобы определить, требуется ли обновление встроенного ПО / rt_uint32_t code_crc; / CRC32 кода, это значение проверки после упаковки, то есть 96 байт после файла rbl / rt_uint32_t hash_val; / предполагается, что эта область указывает на исходное значение контрольной суммы кода, но алгоритм неизвестен, поэтому он не используется в программе / rt_uint32_t raw_size; / размер исходного кода / rt_uint32_t com_size; / упакованный размер кода / rt_uint32_t head_crc; / значение CRC32 заголовка файла rbl, то есть первые 96 байт файла */ } rt_fota_part_head, *rt_fota_part_head_t;

Интерфейс запуска

Интерфейс запуска RT-FOTA выглядит следующим образом:

Интерфейс запуска

Можно видеть, что используются компоненты SFUD и FAL от RTT, и отображается информация о разделе.

Исходный код RT-FOTA открыт, вы можете изменять его по своему усмотрению:

В течение 5 секунд после нажатия клавиши Enter (0x0d) можно войти в командный режим:

Командный режим

Поскольку FINSH имеет функцию аутентификации, можно установить пароль для оболочки. Подробности см. в соответствующей документации RTT.

Командный режим

Командный режим RT-FOTA использует компонент FINSH от RTT. Помимо команд, встроенных в систему, также добавлены команды fota и ymdown:

Команда fota

После ввода команды fota и нажатия Enter появится справка по команде:

rt-fota />fota Usage: fota probe - probe RBL file of partiton fota show partition addr size - show 'size' bytes starting at 'addr' fota clone des_part src_part - clone src partition to des partiton fota exec - execute application program package size | 33824

Здесь перечислены основные сведения о файлах RBL в разделах fm_area и df_area, которые могут быть полезны разработчикам:

  • App partition name: указывает на имя раздела, которое было задано при упаковке файла RTT.
  • Algorithm mode: указывает, какие алгоритмы использовались при упаковке файла RTT: AES256/Quicklz/Fastlz.
  • Firmware version: указывает версию прошивки, которая была задана при упаковке файла RTT.
  • Code raw size: исходный размер кода.
  • Code package size: размер упакованного кода.
  • Build Timestamp: время создания кода.

Параметр show может отображать конкретные данные раздела для удобства отладки и проверки:

rt-fota />fota show app 0 96
00000000: C0 08 00 20 E5 57 02 08 5D 04 02 08 5F 04 02 08
00000010: 63 04 02 08 67 04 02 08 6B 04 02 08 00 00 00 00
00000020: 00 00 00 00 00 00 00 00 00 00 00 00 6F 04 02 08
00000030: 71 04 02 08 00 00 00 00 73 04 02 08 75 04 02 08
00000040: FF 57 02 08 FF 57 02 08 FF 57 02 08 49 55 02 08
00000050: FF 57 02 08 FF 57 02 08 FF 57 02 08 FF 57 02 08

Здесь показаны данные из раздела app с 0 по 96 байт.

Параметр clone используется для клонирования данных раздела:

rt-fota />fota clone fm_area df_area
Clone df_area partition to fm_area partition:
#########################################################
#########################################################
#########################################################
#########################################################
############################
Clone partition success, total 1048576 bytes!

Здесь происходит полное клонирование данных из раздела df_area в раздел fm_area.

Параметр exec используется для выполнения кода приложения в разделе app:

rt-fota />fota exec
[I/fota] Implement application now.
 LCD ID:5510

Команда ymdown

ymdown — это команда загрузки, основанная на Ymodem-протоколе. Она использует компоненты ymodem и ymodem_ota из RTT и устанавливает DEFAULT_DOWNLOAD_PART в файле ymodem_ota.c для указания раздела по умолчанию, который будет использоваться при использовании команды ymdown без параметров. Также можно указать раздел с помощью параметра.

rt-fota />ymdown
Default save firmware on download partition.
Warning: Ymodem has started! This operator will not recovery.
Please select the ota firmware file and use Ymodem to send.
CCCCCC
Starting ymodem transfer.  Press Ctrl+C to cancel.
  100%      33 KB    6 KB/s 00:00:05       0 Errors

Download firmware to flash success.
Download firmware verify........[OK]
Reset system and apply new firmware.

После завершения загрузки система автоматически перезагружается, и новая прошивка переносится в раздел app:

 ____ _____      _____ ___  _____  _
|  _ \_   _|    |  ___/ _ \ _   _|/ \
| |_) || |_____ | |_  || ||  | | / _ \
|  _ < | |_____ |  _| ||_||  | |/ ___ \
|_| \_\|_|      |_|   \___/  |_/_/   \_\
2016 - 2019 Copyright by Radiation @ warfalcon
Version: 1.0.0 build Oct 18 2019

[SFUD] Find a Winbond flash chip. Size is 16777216 bytes.
[SFUD] nor_flash0 flash device is initialize success.
[I/FAL] ==================== FAL partition table ====================
[I/FAL] | name    | flash_dev    |   offset   |    length  |
[I/FAL] -------------------------------------------------------------
[I/FAL] | app     | onchip_flash | 0x00020000 | 0x000e0000 |
[I/FAL] | fm_area | nor_flash0   | 0x00000000 | 0x00100000 |
[I/FAL] | df_area | nor_flash0   | 0x00100000 | 0x00100000 |
[I/FAL] =============================================================
[I/FAL] RT-Thread Flash Abstraction Layer (V0.4.0) initialize success.
Please press [Enter] key into shell mode in 5 secs:
[I/fota] Partition[app] erase start:
[I/fota] Start to copy firmware from fm_area to app partition:
############
[I/fota] Upgrade success, total 48004 bytes.
[I/fota] Copy firmware version Success!
[I/fota] Implement application now.
 LCD ID:5510

Восстановление заводских настроек

Существует несколько способов восстановления заводских настроек, но автор предпочитает использовать внешнюю кнопку для длительного нажатия после запуска. Заводская прошивка хранится в разделе df_area (имя раздела можно настроить в коде), и после длительного нажатия кнопки (длительность настраивается в коде) RT-FOTA автоматически расшифровывает и распаковывает раздел df_area и переносит его в раздел app для выполнения.

Default firmware key pressed:
>>>>>>>>>>
[I/fota] Partition[app] erase start:
[I/fota] Start to copy firmware from df_area to app partition:
############
[I/fota] Upgrade success, total 48004 bytes.
[I/fota] Implement application now.
 LCD ID:5510

Перенос RT-FOTA

Перенос RT-FOTA очень прост, если в исходном коде RT-Thread есть пакет BSP для вашей платформы.

Также легко модифицировать различные компоненты в RT-FOTA, такие как FAL и SFUD, следуя инструкциям RTT или README.md в исходном пакете.

RT-FOTA можно использовать непосредственно в RT-Thread.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/spunky_973-rt-fota.git
git@api.gitlife.ru:oschina-mirror/spunky_973-rt-fota.git
oschina-mirror
spunky_973-rt-fota
spunky_973-rt-fota
master