本帖最后由 avita 于 2023-8-12 12:34 编辑
这工具不错,功能真多。
之前没找到现成的,我也写了一个简单的,只支持 BIN 格式,感兴趣的也可以看看
MergeBin (1).exe
(89.91 KB, 下载次数: 3)
源码地址
[C] 纯文本查看 复制代码 # MergeBin
合并多个 BIN 文件到单个文件
# 例子
## 指定地址
MergeBin [email]0x00000000@boot.bin[/email] [email]0x00002000@app.bin[/email] [firmware.bin]
## 跟随前一数据 (Start At 0x00000000)
MergeBin +@boot.bin +@app.bin [firmware.bin]
# 选项
选 项 | 描 述
--------------- | -------------
size (-s) | 输出文件大小, 默认未指定;
pad (-f) | 空闲空间以指定字节填充;
help (-h) | 打印使用信息;
个人项目范例:(CMAKE 脚本)
1,将生成的 BIN 固件 PRELOAD, SECLOAD 按指定位置合并
2,用 RSA 算法对合并后的固件进行签名
3,然后将签名固件 + 加密签名 + 加密公钥合并生成一个 BIN 文件
4,转换为 HEX 文件 (使用 OBJCOPY)
[C] 纯文本查看 复制代码 # 构建完成后生成 RSA 私钥签名后的 BIN 文件
add_custom_command(TARGET ${PROJECT_NAME}
POST_BUILD
# 构建完成后生成 BIN 文件
COMMAND ${CMAKE_OBJCOPY} -Obinary $<TARGET_FILE:${PROJECT_NAME}> ${PROJECT_NAME}.bin
# 合并 PRELOAD 与 SECLOAD 的 BIN 文件
COMMAND "${PROJECT_SOURCE_DIR}/Tools/MergeBin.exe" "--size=0xFC00"
"0x0000@${PROJECT_BINARY_DIR}/Preload/Preload.bin"
"0x0400@${PROJECT_BINARY_DIR}/${PROJECT_NAME}.bin"
"${PROJECT_BINARY_DIR}/Loader.bin"
# 用私钥对固件签名
COMMAND "${PROJECT_SOURCE_DIR}/Tools/openssl/openssl.exe" dgst -sha1 -sigopt rsa_padding_mode:pss
-sign "${PROJECT_SOURCE_DIR}/Credential/private.pem"
-out "${PROJECT_BINARY_DIR}/Loader.sig"
"${PROJECT_BINARY_DIR}/Loader.bin"
# 合并固件及公钥
COMMAND "${PROJECT_SOURCE_DIR}/Tools/MergeBin.exe" "--size=0x10000"
"0x0000@${PROJECT_BINARY_DIR}/Loader.bin"
"0xFC00@${PROJECT_SOURCE_DIR}/Credential/public.dat"
"0xFE00@${PROJECT_BINARY_DIR}/Loader.sig"
"${PROJECT_BINARY_DIR}/SecLoad.bin"
# 转换签名固件为 HEX 文件
COMMAND ${CMAKE_OBJCOPY} -Ibinary -Oihex --change-addresses=0x08000000
"${PROJECT_BINARY_DIR}/SecLoad.bin"
"${PROJECT_BINARY_DIR}/SecLoad.hex"
# 拷贝固件到 OUTPUT 文件夹
COMMAND ${CMAKE_COMMAND} -E copy
"${PROJECT_BINARY_DIR}/SecLoad.bin"
"${PROJECT_SOURCE_DIR}/Output/SecLoad.bin"
COMMAND ${CMAKE_COMMAND} -E copy
"${PROJECT_BINARY_DIR}/SecLoad.hex"
"${PROJECT_SOURCE_DIR}/Output/SecLoad.hex"
COMMENT "Generating signed SecLoad.bin by RSA-PSS Digital Signature Algorithm !")
|