硬汉嵌入式论坛

 找回密码
 立即注册
查看: 682|回复: 7
收起左侧

[技术讨论] hex合并后的数据

[复制链接]

116

主题

799

回帖

1147

积分

至尊会员

积分
1147
QQ
发表于 2023-8-11 11:50:29 | 显示全部楼层 |阅读模式
使用srec_cat.exe合并的两个hex文件和使用jflash合并 的同样两个文件, 产生的hex文件出现数据不一致, 这个是正常的吗? 如下图:
右边是srec_cat.exe合并的文件

回复

使用道具 举报

116

主题

799

回帖

1147

积分

至尊会员

积分
1147
QQ
 楼主| 发表于 2023-8-11 11:52:46 | 显示全部楼层
图片
区别.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
发表于 2023-8-11 14:04:46 | 显示全部楼层
合并前,两个hex单独生成bin

合并后,srec_cat.exe和jflash分别生成bin,他们对比下就锁定问题了。
回复

使用道具 举报

9

主题

160

回帖

187

积分

初级会员

积分
187
发表于 2023-8-11 16:48:00 | 显示全部楼层
本帖最后由 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 !")




回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
发表于 2023-8-12 08:39:13 | 显示全部楼层
avita 发表于 2023-8-11 16:48
这工具不错,功能真多。
之前没找到现成的,我也写了一个简单的,只支持 BIN 格式,感兴趣的也可以看看

...

谢谢分享。
回复

使用道具 举报

116

主题

799

回帖

1147

积分

至尊会员

积分
1147
QQ
 楼主| 发表于 2023-8-22 13:43:05 | 显示全部楼层
谢谢, 碰到一个问题, 用 srec_cat.exe将hex转换成bin文件, 居然文件大小会变成100M+, 是我用错了吗? 采用这条指令的, srec_cat.exe S238_plf_V.hex -Intel  -o S238_plf_V.bin -Binary
回复

使用道具 举报

0

主题

5

回帖

5

积分

新手上路

积分
5
发表于 2023-9-6 19:22:47 | 显示全部楼层

这行数据的意思是程序的入口地址为0X080000CD。一般没用到,可以忽略。
回复

使用道具 举报

75

主题

684

回帖

909

积分

金牌会员

积分
909
发表于 2023-9-6 21:30:59 | 显示全部楼层

这一行应该没啥意义
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-1 16:31 , Processed in 0.385901 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表