用 esptool.py 的 merge_bin 合并固件,并用 --fill-flash-size 填充到指定容量(如 4MB)。
必需文件与偏移
合并对象:通常包含三部分固件段
bootloader/bootloader.bin(第二阶段引导)partition_table/partition-table.bin(分区表)- 应用镜像(例如
app.bin或自定义生成的*.bin)
固定偏移:不同段需要放在规定地址(偏移量)上
- 常见默认偏移(以 ESP32 为例):
0x1000(bootloader)、0x8000(partition table)、0x10000(app)
- 常见默认偏移(以 ESP32 为例):
- 填充容量:
--fill-flash-size <SIZE>将输出镜像填充到指定总大小(例如4MB),镜像末尾以0xFF填充
推荐用法:使用flash_args自动合并 - 在项目目录构建后,
build/flash_args文件会包含合并所需的段名与偏移列表 命令示例:
cd <你的工程>/build esptool.py --chip esp32 merge_bin --fill-flash-size 4MB -o flash_image.bin @flash_args
手工合并(显式偏移)
没有
flash_args或需要替换应用镜像时,按偏移手工合并:esptool.py --chip esp32 merge_bin --fill-flash-size 4MB \ -o flash_image.bin \ 0x1000 bootloader/bootloader.bin \ 0x8000 partition_table/partition-table.bin \ 0x10000 app.binESP32‑S3:切换
--chip与段文件为目标构建产物:esptool.py --chip esp32s3 merge_bin --fill-flash-size 4MB \ -o flash_image.bin \ 0x1000 bootloader/bootloader.bin \ 0x8000 partition_table/partition-table.bin \ 0x10000 app.bin
实际运行示例
在 apps/esp32/build 目录中,使用构建生成的 flash_args 自动合并并填充到 4MB:
export PATH=$HOME/.espressif/python_env/idf5.0_py3.13_env/bin:$PATH cd apps/esp32/build esptool.py --chip esp32 merge_bin --fill-flash-size 4MB -o flash_test.bin @flash_args ls -l flash_test.bin python3 -c 'import os; s=os.path.getsize("flash_test.bin"); print("SIZE=", s, "OK" if s==4*1024*1024 else "BAD")'
1 条评论
欢迎加入 Typecho 大家族