8000 esp32/makeimg.py: Get bootloader and partition offset from sdkconfig. · micropython/micropython@3835f5f · GitHub
[go: up one dir, main page]

Skip to content

Commit 3835f5f

Browse files
committed
esp32/makeimg.py: Get bootloader and partition offset from sdkconfig.
So that it works on ESP32C3, which has the bootloader at 0x0. Fixes issue #7565. Signed-off-by: Damien George <damien@micropython.org>
1 parent 8645b7c commit 3835f5f

File tree

2 files changed

+39
-10
lines changed

2 files changed

+39
-10
lines changed

ports/esp32/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ endif
3333
all:
3434
idf.py $(IDFPY_FLAGS) build
3535
@$(PYTHON) makeimg.py \
36+
$(BUILD)/sdkconfig \
3637
$(BUILD)/bootloader/bootloader.bin \
3738
$(BUILD)/partition_table/partition-table.bin \
3839
$(BUILD)/micropython.bin \

ports/esp32/makeimg.py

Lines changed: 38 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,37 +6,65 @@
66

77
import gen_esp32part
88

9-
OFFSET_BOOTLOADER = 0x1000
10-
OFFSET_PARTITIONS = 0x8000
9+
OFFSET_BOOTLOADER_DEFAULT = 0x1000
10+
OFFSET_PARTITIONS_DEFAULT = 0x8000
11+
12+
13+
def load_sdkconfig_hex_value(filename, value, default):
14+
value = "CONFIG_" + value + "="
15+
with open(filename, "r") as f:
16+
for line in f:
17+
if line.startswith(value):
18+
return int(line.split("=", 1)[1], 16)
19+
return default
1120

1221

1322
def load_partition_table(filename):
1423
with open(filename, "rb") as f:
1524
return gen_esp32part.PartitionTable.from_binary(f.read())
1625

1726

18-
partition_table = load_partition_table(sys.argv[2])
27+
# Extract command-line arguments.
28+
arg_sdkconfig = sys.argv[1]
29+
arg_bootloader_bin = sys.argv[2]
30+
arg_partitions_bin = sys.argv[3]
31+
arg_application_bin = sys.argv[4]
32+
arg_output_bin = sys.argv[5]
33+
34+
# Load required sdkconfig values.
35+
offset_bootloader = load_sdkconfig_hex_value(
36+
arg_sdkconfig, "BOOTLOADER_OFFSET_IN_FLASH", OFFSET_BOOTLOADER_DEFAULT
37+
)
38+
offset_partitions = load_sdkconfig_hex_value(
39+
arg_sdkconfig, "PARTITION_TABLE_OFFSET", OFFSET_PARTITIONS_DEFAULT
40+
)
41+
42+
# Load the partition table.
43+
partition_table = load_partition_table(arg_partitions_bin)
1944

20-
max_size_bootloader = OFFSET_PARTITIONS - OFFSET_BOOTLOADER
45+
max_size_bootloader = offset_partitions - offset_bootloader
2146
max_size_partitions = 0
2247
offset_application = 0
2348
max_size_application = 0
2449

50+
# Inspect the partition table to find offsets and maximum sizes.
2551
for part in partition_table:
2652
if part.name == "nvs":
27-
max_size_partitions = part.offset - OFFSET_PARTITIONS
53+
max_size_partitions = part.offset - offset_partitions
2854
elif part.type == gen_esp32part.APP_TYPE and offset_application == 0:
2955
offset_application = part.offset
3056
max_size_application = part.size
3157

58+
# Define the input files, their location and maximum size.
3259
files_in = [
33-
("bootloader", OFFSET_BOOTLOADER, max_size_bootloader, sys.argv[1]),
34-
("partitions", OFFSET_PARTITIONS, max_size_partitions, sys.argv[2]),
35-
("application", offset_application, max_size_application, sys.argv[3]),
60+
("bootloader", offset_bootloader, max_size_bootloader, arg_bootloader_bin),
61+
("partitions", offset_partitions, max_size_partitions, arg_partitions_bin),
62+
("application", offset_application, max_size_application, arg_application_bin),
3663
]
37-
file_out = sys.argv[4]
64+
file_out = arg_output_bin
3865

39-
cur_offset = OFFSET_BOOTLOADER
66+
# Write output file with combined firmware.
67+
cur_offset = offset_bootloader
4068
with open(file_out, "wb") as fout:
4169
for name, offset, max_size, file_in in files_in:
4270
assert offset >= cur_offset

0 commit comments

Comments
 (0)
0