|
|
@@ -20,6 +20,8 @@
|
|
|
#include "esp_flash_encrypt.h"
|
|
|
#include "esp_rom_crc.h"
|
|
|
|
|
|
+#define BLANK_COREDUMP_SIZE 0xFFFFFFFF
|
|
|
+
|
|
|
const static DRAM_ATTR char TAG[] __attribute__((unused)) = "esp_core_dump_flash";
|
|
|
|
|
|
#if CONFIG_ESP_COREDUMP_ENABLE_TO_FLASH
|
|
|
@@ -391,9 +393,9 @@ esp_err_t esp_core_dump_image_get(size_t* out_addr, size_t *out_size)
|
|
|
}
|
|
|
|
|
|
/* Verify that the size read from the flash is not corrupted. */
|
|
|
- if (size == 0xFFFFFFFF) {
|
|
|
- ESP_LOGD(TAG, "Blank core dump partition!");
|
|
|
- err = ESP_ERR_INVALID_SIZE;
|
|
|
+ if (size == BLANK_COREDUMP_SIZE) {
|
|
|
+ ESP_LOGD(TAG, "Coredump not found, blank core dump partition!");
|
|
|
+ err = ESP_ERR_NOT_FOUND;
|
|
|
} else if ((size < sizeof(uint32_t)) || (size > core_part->size)) {
|
|
|
ESP_LOGE(TAG, "Incorrect size of core dump image: %d", size);
|
|
|
err = ESP_ERR_INVALID_SIZE;
|
|
|
@@ -459,3 +461,35 @@ esp_err_t esp_core_dump_image_get(size_t* out_addr, size_t *out_size)
|
|
|
}
|
|
|
|
|
|
#endif
|
|
|
+
|
|
|
+esp_err_t esp_core_dump_image_erase(void)
|
|
|
+{
|
|
|
+ /* Find the partition that could potentially contain a (previous) core dump. */
|
|
|
+ const esp_partition_t *core_part = esp_partition_find_first(ESP_PARTITION_TYPE_DATA,
|
|
|
+ ESP_PARTITION_SUBTYPE_DATA_COREDUMP,
|
|
|
+ NULL);
|
|
|
+ if (!core_part) {
|
|
|
+ ESP_LOGE(TAG, "No core dump partition found!");
|
|
|
+ return ESP_ERR_NOT_FOUND;
|
|
|
+ }
|
|
|
+ if (core_part->size < sizeof(uint32_t)) {
|
|
|
+ ESP_LOGE(TAG, "Too small core dump partition!");
|
|
|
+ return ESP_ERR_INVALID_SIZE;
|
|
|
+ }
|
|
|
+
|
|
|
+ esp_err_t err = ESP_OK;
|
|
|
+ err = esp_partition_erase_range(core_part, 0, core_part->size);
|
|
|
+ if (err != ESP_OK) {
|
|
|
+ ESP_LOGE(TAG, "Failed to erase core dump partition (%d)!", err);
|
|
|
+ return err;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Mark core dump as deleted by setting field size
|
|
|
+ const uint32_t blank_size = BLANK_COREDUMP_SIZE;
|
|
|
+ err = esp_partition_write(core_part, 0, &blank_size, sizeof(blank_size));
|
|
|
+ if (err != ESP_OK) {
|
|
|
+ ESP_LOGE(TAG, "Failed to write core dump partition size (%d)!", err);
|
|
|
+ }
|
|
|
+
|
|
|
+ return err;
|
|
|
+}
|