Skip to content

Commit 097f8c9

Browse files
committed
ESP32: add support to boot.avm partition
Try to boot boot.avm partition first, which will take care of application loading. Signed-off-by: Davide Bettio <[email protected]>
1 parent ca4e1bf commit 097f8c9

File tree

3 files changed

+14
-10
lines changed

3 files changed

+14
-10
lines changed

src/platforms/esp32/main/main.c

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,11 @@ void app_main()
6565

6666
spi_flash_mmap_handle_t handle;
6767
int size;
68-
const void *main_avm = esp32_sys_mmap_partition("main.avm", &handle, &size);
68+
const void *startup_avm = esp32_sys_mmap_partition("boot.avm", &handle, &size);
69+
if (IS_NULL_PTR(startup_avm)) {
70+
ESP_LOGI(TAG, "Trying deprecated main.avm partition.");
71+
startup_avm = esp32_sys_mmap_partition("main.avm", &handle, &size);
72+
}
6973

7074
uint32_t startup_beam_size;
7175
const void *startup_beam;
@@ -76,12 +80,12 @@ void app_main()
7680
port_driver_init_all(glb);
7781
nif_collection_init_all(glb);
7882

79-
if (!avmpack_is_valid(main_avm, size)) {
80-
ESP_LOGE(TAG, "Invalid main.avm packbeam. size=%u", size);
83+
if (!avmpack_is_valid(startup_avm, size)) {
84+
ESP_LOGE(TAG, "Invalid startup avmpack. size=%u", size);
8185
AVM_ABORT();
8286
}
83-
if (!avmpack_find_section_by_flag(main_avm, BEAM_START_FLAG, &startup_beam, &startup_beam_size, &startup_module_name)) {
84-
ESP_LOGE(TAG, "Error: Failed to locate start module in main.avm packbeam. (Did you flash a library by mistake?)");
87+
if (!avmpack_find_section_by_flag(startup_avm, BEAM_START_FLAG, &startup_beam, &startup_beam_size, &startup_module_name)) {
88+
ESP_LOGE(TAG, "Error: Failed to locate start module in startup partition. (Did you flash a library by mistake?)");
8589
AVM_ABORT();
8690
}
8791
ESP_LOGI(TAG, "Found startup beam %s", startup_module_name);
@@ -92,7 +96,7 @@ void app_main()
9296
}
9397
avmpack_data_init(&avmpack_data->base, &const_avm_pack_info);
9498
avmpack_data->base.in_use = true;
95-
avmpack_data->base.data = main_avm;
99+
avmpack_data->base.data = startup_avm;
96100
synclist_append(&glb->avmpack_data, &avmpack_data->base.avmpack_head);
97101

98102
const void *lib_avm = esp32_sys_mmap_partition("lib.avm", &handle, &size);
@@ -106,7 +110,7 @@ void app_main()
106110
avmpack_data->base.data = lib_avm;
107111
synclist_append(&glb->avmpack_data, &avmpack_data->base.avmpack_head);
108112
} else {
109-
ESP_LOGW(TAG, "Unable to mount lib.avm partition. Hopefully the AtomVM core libraries are included in your application.");
113+
ESP_LOGI(TAG, "Unable to mount lib.avm partition. Hopefully the AtomVM core libraries are included in your application.");
110114
}
111115

112116
Module *mod = module_new_from_iff_binary(glb, startup_beam, startup_beam_size);

src/platforms/esp32/partitions.csv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@
88
nvs, data, nvs, 0x9000, 0x6000,
99
phy_init, data, phy, 0xf000, 0x1000,
1010
factory, app, factory, 0x10000, 0x1C0000,
11-
lib.avm, data, phy, 0x1D0000, 0x40000,
11+
boot.avm, data, phy, 0x1D0000, 0x40000,
1212
main.avm, data, phy, 0x210000, 0x100000

src/platforms/esp32/tools/mkimage.config.in

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,9 @@
3636
path => ["${BUILD_DIR}/atomvm-esp32.bin", "${ROOT_DIR}/src/platforms/esp32/build/atomvvm-esp32.bin"]
3737
},
3838
#{
39-
name => "AtomVM Core BEAM Library",
39+
name => "AtomVM Boot and Core BEAM Library",
4040
offset => "0x1D0000",
41-
path => ["${BUILD_DIR}/../../../../build/libs/atomvmlib.avm"]
41+
path => ["${BUILD_DIR}/../../../../build/libs/esp32boot/esp32boot.avm"]
4242
}
4343
]
4444
}.

0 commit comments

Comments
 (0)