Компонент esp_https_ota предоставляет упрощенные API-функции для обновления firmware по протоколу HTTPS. Он представляет слой абстракции поверх существующего OTA API [4].
Пример приложения:
esp_err_t do_firmware_upgrade()
{
esp_http_client_config_t config =
{
.url = CONFIG_FIRMWARE_UPGRADE_URL,
.cert_pem = (char *)server_cert_pem_start,
};
esp_https_ota_config_t ota_config =
{
.http_config = &config,
};
esp_err_t ret = esp_https_ota(&ota_config);
if (ret == ESP_OK)
{
esp_restart();
}
else
{
return ESP_FAIL;
}
return ESP_OK;
}
[Проверка сервера]
Для дополнительной информации по проверке сервера см. раздел "TLS Server Verification" [2]. Нужен корневой сертификат (root certificate) в формате PEM для esp_http_client_config_t::cert_pem.
Замечание: для проверки должен использоваться server-endpoint корневой сертификат вместо любых промежуточных точек из цепочки сертификата. Причина в том, что у корневого сертификата максимальная достоверность, и она обычно остается неизменной в течение долгого периода времени. Пользователи также могут для проверки использовать функцию ESP x509 Certificate Bundle (с помощью esp_http_client_config_t::crt_bundle_attach), которая охватывает большинство доверенных корневых сертификатов (trusted root certificate).
[Загрузка части образа по протоколу HTTPS]
Для использования функции частичной загрузки образа приложения (partial image download) разрешите конфигурацию partial_http_download в esp_https_ota_config_t. Когда эта конфигурация разрешена, образ firmware будет загружен с помощью нескольких запросов HTTP указанного размера. Максимальный размер содержимого для каждого запроса может быть указан установкой значения max_http_request_size.
Эта опция полезна при извлечении образа из службы наподобие AWS S3, когда размер буфера mbedTLS Rx (опция CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN) может быть установлен в меньшее значение, которое нельзя использовать без разрешения этой конфигурации.
Размер по умолчанию для буфера mbedTLS Rx установлен в 16K. С использованием partial_http_download при max_http_request_size = 4K, размер буфера mbedTLS Rx может быть уменьшен до 4K. С этой конфигурацией ожидается экономия памяти около 12K.
Signature Verification. Для дополнительной безопасности может быть проверена цифровая подпись образов OTA firmware. Как это делается, см. раздел "Обновления Secure OTA без Secure boot" документации [4].
Advanced API. Компонент esp_https_ota также предоставляет дополнительные API-функции, которые могут использоваться, если за процессом OTA требуется больше контроля.
Пример, который использует дополнительное ESP_HTTPS_OTA API, см. в каталоге advanced_https_ota среди примеров среды разработки ESP-IDF (examples\system\ota).
[Обновления OTA с предварительно зашифрованным firmware]
Для выполнения обновлений OTA зашифрованным образом приложения (Pre-Encrypted Firmware) разрешите опцию CONFIG_ESP_HTTPS_OTA_DECRYPT_CB в menuconfig (Security features → Enable flash encryption on boot (READ DOCS FIRST) → Potentially insecure options). Пример выполнения OTA-обновления с Pre-Encrypted Firmware см. в каталоге pre_encrypted_ota среди примеров среды разработки ESP-IDF (examples\system\ota).
[Справочник по ESP HTTPS API]
Заголовочный файл: components/esp_https_ota/include/esp_https_ota.h.
Функция |
Описание |
esp_https_ota |
Обновление приложения HTTPS OTA. Эта функция выделяет контекст для обновления HTTPS OTA Firmware, устанавливает соединение HTTPS, читает данные образа из потока HTTP, записывает их в раздел OTA [5] и завершает операцию HTTPS OTA Firmware. Эта API-функция поддерживает перенаправление URL, однако если CA cert указанной ссылки URL отличается, то он должен быть добавлен к cert_pem в ota_config->http_config. |
esp_https_ota_begin |
Запускает обновление HTTPS OTA Firmware. Эта функция инициализирует контекст ESP HTTPS OTA и устанавливает соединение HTTPS, поэтому она должна быть вызвана первой. Если эта функция выполнит успешный возврат, то должна быть вызвана функция esp_https_ota_perform для продолжения процесса OTA, и для завершения процесса должна быть вызвана функция esp_https_ota_finish в случае успеха или при ошибке в последующих операциях. Эта API-функция поддерживает перенаправление URL, однако если CA cert указанной ссылки URL отличается, то он должен быть добавлен к cert_pem в http_config. который является частью ota_config. В случае ошибки это API явно установит в NULL значение дескриптора (параметр handle). |
esp_https_ota_perform |
Читает данные образа приложения из потока HTTP и записывает их в раздел OTA памяти SPI flash. Эта функция должна быть вызвана только в том случае, если esp_https_ota_begin() вернула успешный результат. Функция esp_https_ota_perform должна быть вызвана в цикле, поскольку она делает возврат после каждой операции чтения HTTP. Это дает возможность для пользователя остановить обновление OTA. |
esp_https_ota_is_complete_data_received |
Проверяет, были ли полностью приняты данные, или нет. |
esp_https_ota_finish |
Выполняет очистку контекста обновления HTTPS OTA Firmware и закрывает соединение HTTPS. Эта функция также переключит раздел загрузки (boot partition) на раздел OTA, который содержит новый загруженный образ firmware. |
esp_https_ota_abort |
Выполняет очистку контекста обновления HTTPS OTA Firmware и закрывает соединение HTTPS. Функция esp_https_ota_abort не должна вызываться после вызова esp_https_ota_finish. |
esp_https_ota_get_img_desc |
Читает описание приложения из заголовка образа. Это описание предоставляет информацию наподобие "Firmware version". |
esp_https_ota_get_image_len_read |
Возвратит количество данных OTA, прочитанных в настоящий момент. |
esp_https_ota_get_image_size |
Возвратит полный размер образа OTA. |
Примечание: полное описание макросов, типов данных, API-функций OTA и их параметров см. в документации [1].
[Словарик]
AWS S3 Amazon Web Services, или Amazon Simple Storage Service (Amazon S3) - сервис хранения объектов, предлагающий лучшие в отрасли показатели производительности, масштабируемости, доступности и безопасности данных. Amazon S3 можно использовать для хранения и доступа к любым объемам данных когда угодно и откуда угодно.
OTA Over The Air, технология загрузки (обновления) по радиоканалу.
[Ссылки]
1. ESP32 ESP HTTPS OTA site:docs.espressif.com. 2. ESP-TLS site:docs.espressif.com. 3. Amazon S3 site:aws.amazon.com. 4. ESP32: обновление по радиоканалу (OTA). 5. ESP32: таблицы разделов. |