mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
esp_app_format: Fixed build errors and resolved dependencies
This commit is contained in:
parent
0519f604db
commit
0071ea498f
@ -19,7 +19,7 @@ set(srcs
|
||||
if(BOOTLOADER_BUILD)
|
||||
set(include_dirs "include" "bootloader_flash/include"
|
||||
"private_include")
|
||||
set(priv_requires micro-ecc spi_flash efuse)
|
||||
set(priv_requires micro-ecc spi_flash efuse esp_app_format)
|
||||
list(APPEND srcs
|
||||
"src/bootloader_init.c"
|
||||
"src/bootloader_clock_loader.c"
|
||||
@ -37,7 +37,7 @@ else()
|
||||
set(include_dirs "include" "bootloader_flash/include")
|
||||
set(priv_include_dirs "private_include")
|
||||
# heap is required for `heap_memory_layout.h` header
|
||||
set(priv_requires spi_flash mbedtls efuse app_update heap)
|
||||
set(priv_requires spi_flash mbedtls efuse heap esp_app_format)
|
||||
endif()
|
||||
|
||||
if(BOOTLOADER_BUILD)
|
||||
@ -86,6 +86,15 @@ idf_component_register(SRCS "${srcs}"
|
||||
REQUIRES "${requires}"
|
||||
PRIV_REQUIRES "${priv_requires}")
|
||||
|
||||
if(NOT BOOTLOADER_BUILD)
|
||||
if(CONFIG_SECURE_SIGNED_ON_UPDATE)
|
||||
if(CONFIG_SECURE_SIGNED_APPS_ECDSA_SCHEME OR CONFIG_SECURE_SIGNED_APPS_RSA_SCHEME OR
|
||||
CONFIG_SECURE_SIGNED_APPS_ECDSA_V2_SCHEME)
|
||||
target_link_libraries(${COMPONENT_LIB} PRIVATE idf::app_update)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(CONFIG_SECURE_SIGNED_APPS AND (CONFIG_SECURE_BOOT_V1_ENABLED OR CONFIG_SECURE_SIGNED_APPS_ECDSA_SCHEME))
|
||||
if(BOOTLOADER_BUILD)
|
||||
# Whether CONFIG_SECURE_BOOT_BUILD_SIGNED_BINARIES or not, we need verification key to embed
|
||||
|
@ -7,7 +7,6 @@
|
||||
#pragma once
|
||||
#include "esp_flash_partitions.h"
|
||||
#include "esp_image_format.h"
|
||||
#include "esp_app_format.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@ -151,20 +150,6 @@ int bootloader_common_get_active_otadata(esp_ota_select_entry_t *two_otadata);
|
||||
*/
|
||||
int bootloader_common_select_otadata(const esp_ota_select_entry_t *two_otadata, bool *valid_two_otadata, bool max);
|
||||
|
||||
/**
|
||||
* @brief Returns esp_app_desc structure for app partition. This structure includes app version.
|
||||
*
|
||||
* Returns a description for the requested app partition.
|
||||
* @param[in] partition App partition description.
|
||||
* @param[out] app_desc Structure of info about app.
|
||||
* @return
|
||||
* - ESP_OK: Successful.
|
||||
* - ESP_ERR_INVALID_ARG: The arguments passed are not valid.
|
||||
* - ESP_ERR_NOT_FOUND: app_desc structure is not found. Magic word is incorrect.
|
||||
* - ESP_FAIL: mapping is fail.
|
||||
*/
|
||||
esp_err_t bootloader_common_get_partition_description(const esp_partition_pos_t *partition, esp_app_desc_t *app_desc);
|
||||
|
||||
/**
|
||||
* @brief Get chip package
|
||||
*
|
||||
|
@ -106,25 +106,3 @@ typedef struct {
|
||||
} esp_image_segment_header_t;
|
||||
|
||||
#define ESP_IMAGE_MAX_SEGMENTS 16 /*!< Max count of segments in the image. */
|
||||
|
||||
#define ESP_APP_DESC_MAGIC_WORD 0xABCD5432 /*!< The magic word for the esp_app_desc structure that is in DROM. */
|
||||
|
||||
/**
|
||||
* @brief Description about application.
|
||||
*/
|
||||
typedef struct {
|
||||
uint32_t magic_word; /*!< Magic word ESP_APP_DESC_MAGIC_WORD */
|
||||
uint32_t secure_version; /*!< Secure version */
|
||||
uint32_t reserv1[2]; /*!< reserv1 */
|
||||
char version[32]; /*!< Application version */
|
||||
char project_name[32]; /*!< Project name */
|
||||
char time[16]; /*!< Compile time */
|
||||
char date[16]; /*!< Compile date*/
|
||||
char idf_ver[32]; /*!< Version IDF */
|
||||
uint8_t app_elf_sha256[32]; /*!< sha256 of elf file */
|
||||
uint32_t reserv2[20]; /*!< reserv2 */
|
||||
} esp_app_desc_t;
|
||||
|
||||
/** @cond */
|
||||
_Static_assert(sizeof(esp_app_desc_t) == 256, "esp_app_desc_t should be 256 bytes");
|
||||
/** @endcond */
|
||||
|
@ -112,30 +112,6 @@ int bootloader_common_select_otadata(const esp_ota_select_entry_t *two_otadata,
|
||||
return active_otadata;
|
||||
}
|
||||
|
||||
esp_err_t bootloader_common_get_partition_description(const esp_partition_pos_t *partition, esp_app_desc_t *app_desc)
|
||||
{
|
||||
if (partition == NULL || app_desc == NULL || partition->offset == 0) {
|
||||
return ESP_ERR_INVALID_ARG;
|
||||
}
|
||||
|
||||
const uint32_t app_desc_offset = sizeof(esp_image_header_t) + sizeof(esp_image_segment_header_t);
|
||||
const uint32_t mmap_size = app_desc_offset + sizeof(esp_app_desc_t);
|
||||
const uint8_t *image = bootloader_mmap(partition->offset, mmap_size);
|
||||
if (image == NULL) {
|
||||
ESP_LOGE(TAG, "bootloader_mmap(0x%x, 0x%x) failed", partition->offset, mmap_size);
|
||||
return ESP_FAIL;
|
||||
}
|
||||
|
||||
memcpy(app_desc, image + app_desc_offset, sizeof(esp_app_desc_t));
|
||||
bootloader_munmap(image);
|
||||
|
||||
if (app_desc->magic_word != ESP_APP_DESC_MAGIC_WORD) {
|
||||
return ESP_ERR_NOT_FOUND;
|
||||
}
|
||||
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
#if defined( CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP ) || defined( CONFIG_BOOTLOADER_CUSTOM_RESERVE_RTC )
|
||||
|
||||
#define RTC_RETAIN_MEM_ADDR (SOC_RTC_DRAM_HIGH - sizeof(rtc_retain_mem_t))
|
||||
|
@ -60,6 +60,7 @@
|
||||
|
||||
#include "esp_cpu.h"
|
||||
#include "esp_image_format.h"
|
||||
#include "esp_app_desc.h"
|
||||
#include "esp_secure_boot.h"
|
||||
#include "esp_flash_encrypt.h"
|
||||
#include "esp_flash_partitions.h"
|
||||
@ -119,6 +120,31 @@ static esp_err_t read_otadata(const esp_partition_pos_t *ota_info, esp_ota_selec
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
esp_err_t bootloader_common_get_partition_description(const esp_partition_pos_t *partition, esp_app_desc_t *app_desc)
|
||||
{
|
||||
if (partition == NULL || app_desc == NULL || partition->offset == 0) {
|
||||
return ESP_ERR_INVALID_ARG;
|
||||
}
|
||||
|
||||
const uint32_t app_desc_offset = sizeof(esp_image_header_t) + sizeof(esp_image_segment_header_t);
|
||||
const uint32_t mmap_size = app_desc_offset + sizeof(esp_app_desc_t);
|
||||
const uint8_t *image = bootloader_mmap(partition->offset, mmap_size);
|
||||
if (image == NULL) {
|
||||
ESP_LOGE(TAG, "bootloader_mmap(0x%x, 0x%x) failed", partition->offset, mmap_size);
|
||||
return ESP_FAIL;
|
||||
}
|
||||
|
||||
memcpy(app_desc, image + app_desc_offset, sizeof(esp_app_desc_t));
|
||||
bootloader_munmap(image);
|
||||
|
||||
if (app_desc->magic_word != ESP_APP_DESC_MAGIC_WORD) {
|
||||
return ESP_ERR_NOT_FOUND;
|
||||
}
|
||||
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
|
||||
bool bootloader_utility_load_partition_table(bootloader_state_t *bs)
|
||||
{
|
||||
const esp_partition_info_t *partitions;
|
||||
|
@ -1,6 +1,6 @@
|
||||
idf_component_register(SRCS "src/esp_https_ota.c"
|
||||
INCLUDE_DIRS "include"
|
||||
REQUIRES esp_http_client bootloader_support
|
||||
REQUIRES esp_http_client bootloader_support esp_app_format
|
||||
PRIV_REQUIRES log app_update)
|
||||
|
||||
target_compile_options(${COMPONENT_LIB} PRIVATE "-Wno-format")
|
||||
|
@ -8,6 +8,7 @@
|
||||
|
||||
#include <esp_http_client.h>
|
||||
#include <bootloader_common.h>
|
||||
#include "esp_app_desc.h"
|
||||
#include <sdkconfig.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@ -85,7 +85,7 @@ endif()
|
||||
# need to introduce panic "event" concept to remove this dependency (IDF-2194)
|
||||
idf_component_optional_requires(PRIVATE esp_gdbstub)
|
||||
|
||||
idf_component_optional_requires(PRIVATE app_update)
|
||||
idf_component_optional_requires(PRIVATE esp_app_format)
|
||||
|
||||
if(CONFIG_PM_ENABLE)
|
||||
idf_component_optional_requires(PRIVATE pm)
|
||||
|
@ -24,9 +24,9 @@
|
||||
|
||||
#include "sdkconfig.h"
|
||||
|
||||
#if __has_include("esp_ota_ops.h")
|
||||
#include "esp_ota_ops.h"
|
||||
#define HAS_ESP_OTA 1
|
||||
#if __has_include("esp_app_desc.h")
|
||||
#define WITH_ELF_SHA256
|
||||
#include "esp_app_desc.h"
|
||||
#endif
|
||||
|
||||
#if CONFIG_ESP_COREDUMP_ENABLE
|
||||
@ -312,13 +312,13 @@ void esp_panic_handler(panic_info_t *info)
|
||||
PANIC_INFO_DUMP(info, state);
|
||||
panic_print_str("\r\n");
|
||||
|
||||
#if HAS_ESP_OTA
|
||||
#ifdef WITH_ELF_SHA256
|
||||
panic_print_str("\r\nELF file SHA256: ");
|
||||
char sha256_buf[65];
|
||||
esp_ota_get_app_elf_sha256(sha256_buf, sizeof(sha256_buf));
|
||||
esp_app_get_elf_sha256(sha256_buf, sizeof(sha256_buf));
|
||||
panic_print_str(sha256_buf);
|
||||
panic_print_str("\r\n");
|
||||
#endif //HAS_ESP_OTA
|
||||
#endif
|
||||
|
||||
panic_print_str("\r\n");
|
||||
|
||||
|
@ -20,8 +20,6 @@
|
||||
#include "hal/uart_types.h"
|
||||
#include "hal/uart_ll.h"
|
||||
|
||||
#include "esp_system.h"
|
||||
#include "esp_log.h"
|
||||
#include "esp_heap_caps_init.h"
|
||||
#include "spi_flash_mmap.h"
|
||||
#include "esp_flash_internal.h"
|
||||
@ -33,10 +31,7 @@
|
||||
#include "esp_xt_wdt.h"
|
||||
#include "esp_cpu.h"
|
||||
|
||||
#if __has_include("esp_ota_ops.h")
|
||||
#include "esp_ota_ops.h"
|
||||
#define HAS_ESP_OTA 1
|
||||
#endif
|
||||
#include "esp_partition.h"
|
||||
|
||||
/***********************************************/
|
||||
// Headers for other components init functions
|
||||
@ -44,6 +39,11 @@
|
||||
#include "esp_coexist_internal.h"
|
||||
#endif
|
||||
|
||||
#if __has_include("esp_app_desc.h")
|
||||
#define WITH_APP_IMAGE_INFO
|
||||
#include "esp_app_desc.h"
|
||||
#endif
|
||||
|
||||
#if CONFIG_ESP_COREDUMP_ENABLE
|
||||
#include "esp_core_dump.h"
|
||||
#endif
|
||||
@ -408,10 +408,10 @@ static void start_cpu0_default(void)
|
||||
int cpu_freq = esp_clk_cpu_freq();
|
||||
ESP_EARLY_LOGI(TAG, "cpu freq: %d Hz", cpu_freq);
|
||||
|
||||
#if HAS_ESP_OTA // [refactor-todo] find a better way to handle this.
|
||||
#ifdef WITH_APP_IMAGE_INFO
|
||||
// Display information about the current running image.
|
||||
if (LOG_LOCAL_LEVEL >= ESP_LOG_INFO) {
|
||||
const esp_app_desc_t *app_desc = esp_ota_get_app_description();
|
||||
const esp_app_desc_t *app_desc = esp_app_get_description();
|
||||
ESP_EARLY_LOGI(TAG, "Application information:");
|
||||
#ifndef CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR
|
||||
ESP_EARLY_LOGI(TAG, "Project name: %s", app_desc->project_name);
|
||||
@ -426,11 +426,11 @@ static void start_cpu0_default(void)
|
||||
ESP_EARLY_LOGI(TAG, "Compile time: %s %s", app_desc->date, app_desc->time);
|
||||
#endif
|
||||
char buf[17];
|
||||
esp_ota_get_app_elf_sha256(buf, sizeof(buf));
|
||||
esp_app_get_elf_sha256(buf, sizeof(buf));
|
||||
ESP_EARLY_LOGI(TAG, "ELF file SHA256: %s...", buf);
|
||||
ESP_EARLY_LOGI(TAG, "ESP-IDF: %s", app_desc->idf_ver);
|
||||
}
|
||||
#endif //HAS_ESP_OTA
|
||||
#endif
|
||||
|
||||
// Initialize core components and services.
|
||||
do_core_init();
|
||||
|
@ -24,4 +24,8 @@ idf_component_register(SRCS ${srcs}
|
||||
INCLUDE_DIRS ${includes}
|
||||
PRIV_INCLUDE_DIRS ${priv_includes}
|
||||
LDFRAGMENTS linker.lf
|
||||
PRIV_REQUIRES spi_flash app_update mbedtls esp_rom soc driver)
|
||||
PRIV_REQUIRES spi_flash bootloader_support mbedtls esp_rom soc esp_system driver)
|
||||
|
||||
if(CONFIG_ESP_COREDUMP_DATA_FORMAT_ELF)
|
||||
target_link_libraries(${COMPONENT_LIB} PRIVATE idf::esp_app_format)
|
||||
endif()
|
||||
|
@ -6,7 +6,6 @@
|
||||
#include <string.h>
|
||||
#include "esp_attr.h"
|
||||
#include "esp_partition.h"
|
||||
#include "esp_ota_ops.h"
|
||||
#include "spi_flash_mmap.h"
|
||||
#include "esp_flash_encrypt.h"
|
||||
#include "sdkconfig.h"
|
||||
@ -16,6 +15,10 @@
|
||||
#include "esp_core_dump_port_impl.h"
|
||||
#include "esp_core_dump_common.h"
|
||||
|
||||
#ifdef CONFIG_ESP_COREDUMP_DATA_FORMAT_ELF
|
||||
#include "esp_app_desc.h"
|
||||
#endif
|
||||
|
||||
#define ELF_CLASS ELFCLASS32
|
||||
|
||||
#include "elf.h" // for ELF file types
|
||||
@ -496,7 +499,7 @@ static int elf_write_core_dump_info(core_dump_elf_t *self)
|
||||
|
||||
ESP_COREDUMP_LOG_PROCESS("================ Processing coredump info ================");
|
||||
int data_len = (int)sizeof(self->elf_version_info.app_elf_sha256);
|
||||
data_len = esp_ota_get_app_elf_sha256((char*)self->elf_version_info.app_elf_sha256, (size_t)data_len);
|
||||
data_len = esp_app_get_elf_sha256((char*)self->elf_version_info.app_elf_sha256, (size_t)data_len);
|
||||
ESP_COREDUMP_LOG_PROCESS("Application SHA256='%s', length=%d.",
|
||||
self->elf_version_info.app_elf_sha256, data_len);
|
||||
self->elf_version_info.version = esp_core_dump_elf_version();
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include "esp_event.h"
|
||||
#include "esp_log.h"
|
||||
#include "esp_ota_ops.h"
|
||||
#include "esp_app_format.h"
|
||||
#include "esp_http_client.h"
|
||||
#include "esp_flash_partitions.h"
|
||||
#include "esp_partition.h"
|
||||
|
@ -21,8 +21,8 @@ set(extra_allowed_components
|
||||
# These components are currently included into "G1" build, but shouldn't.
|
||||
# After removing the extra dependencies, remove the components from this list as well.
|
||||
set(extra_components_which_shouldnt_be_included
|
||||
# app_update gets added because of bootloader_support, spi_flash, espcoredump.
|
||||
# bootloader_support, spi_flash, espcoredump should be removed from dependencies;
|
||||
# app_update gets added because of spi_flash.
|
||||
# spi_flash should be removed from dependencies;
|
||||
app_update
|
||||
# of G1 components, bootloader is only included from spi_flash
|
||||
# [refactor-todo]: see if this dependency from spi_flash can be made weak
|
||||
@ -36,6 +36,8 @@ set(extra_components_which_shouldnt_be_included
|
||||
# [refactor-todo]: driver is a dependency of esp_pm, esp_timer, spi_flash, vfs, esp_wifi, ${IDF_TARGET}
|
||||
# all of these should be removed from G1 except for spi_flash.
|
||||
driver
|
||||
# esp_app_format is dependency of bootloader_support, app_update
|
||||
esp_app_format
|
||||
# [refactor-todo]: efuse is a dependency of esp_hw_support, esp_system.
|
||||
# Figure out if these components can exist without a dependency on efuse.
|
||||
# If not, see if esp_hw_support can provide minimal efuse component replacement in G1 build.
|
||||
|
Loading…
Reference in New Issue
Block a user