esptool.pymerge_bin 合并固件,并用 --fill-flash-size 填充到指定容量(如 4MB)。
必需文件与偏移

  • 合并对象:通常包含三部分固件段

    • bootloader/bootloader.bin(第二阶段引导)
    • partition_table/partition-table.bin(分区表)
    • 应用镜像(例如 app.bin 或自定义生成的 *.bin
  • 固定偏移:不同段需要放在规定地址(偏移量)上

    • 常见默认偏移(以 ESP32 为例):0x1000(bootloader)、0x8000(partition table)、0x10000(app)
  • 填充容量:--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.bin
  • ESP32‑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")'
最后修改:2025 年 12 月 12 日
如果觉得我的文章对你有用,请随意赞赏