mirror of
https://github.com/espressif/ESP8266_RTOS_SDK.git
synced 2025-05-31 15:41:02 +08:00
feat(bootloader): Bootloader check and loader target application
This commit is contained in:
@ -491,6 +491,9 @@ static void set_cache_and_start_app(
|
||||
|
||||
#include "esp_flash_partitions.h"
|
||||
|
||||
#define ESP_CACHE1_ADDR_MAX 0x100000
|
||||
#define ESP_CACHE2_ADDR_MAX 0x200000
|
||||
|
||||
static const char* TAG = "boot";
|
||||
|
||||
bool bootloader_utility_load_partition_table(bootloader_state_t* bs)
|
||||
@ -814,12 +817,27 @@ void bootloader_utility_load_image(const esp_image_metadata_t* image_data)
|
||||
copy loaded segments to RAM, set up caches for mapped segments, and start application
|
||||
unpack_load_app(image_data);
|
||||
#else
|
||||
Cache_Read_Enable(0, 0, 0);
|
||||
size_t map;
|
||||
|
||||
void (*user_start)(void);
|
||||
if (image_data->start_addr < ESP_CACHE1_ADDR_MAX
|
||||
&& image_data->start_addr + image_data->image_len < ESP_CACHE1_ADDR_MAX) {
|
||||
map = 0;
|
||||
} else if (image_data->start_addr >= ESP_CACHE1_ADDR_MAX
|
||||
&& image_data->start_addr < ESP_CACHE2_ADDR_MAX
|
||||
&& image_data->start_addr + image_data->image_len < ESP_CACHE2_ADDR_MAX) {
|
||||
map = 1;
|
||||
} else {
|
||||
ESP_LOGE(TAG, "ERROR: app bin error, start_addr %x image_len %d\n", image_data->start_addr, image_data->image_len);
|
||||
/* Blocking here to let user judge. */
|
||||
while (1);
|
||||
}
|
||||
|
||||
Cache_Read_Enable(map, 0, 0);
|
||||
|
||||
void (*user_start)(size_t start_addr, size_t map);
|
||||
|
||||
user_start = (void *)image_data->image.entry_addr;
|
||||
user_start();
|
||||
user_start(image_data->start_addr, map);
|
||||
#endif /* BOOTLOADER_UNPACK_APP */
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user