目录

  • 映像文件工具srec

    • 介绍与帮助
    • 常用例子
      • 常用选项
      • 一个实际的例子
      • hex转bin
      • 数据填充
      • 文件合并
      • 文件分割
      • 加入CRC
      • 查看信息
      • 使用命令集合的文本
    • 详细文件格式的描述
    • 附录:MDK的例子(谷歌翻译的)
      • 用例
      • 教程
      • 句法
      • 更多信息
      • 也可以看看
      • 另见8051


title: 映像文件工具srec
tags: pc
date: 2019-01-06 22:58:38
---

映像文件工具srec

介绍与帮助

项目主页在这里

  1. MDK提供的简单例子
  2. 官方的例子
  3. 在线hex,bin的工具
  4. arm文件格式

开源工具SRecord能够解析转换多种映像文件,Binary,Intel,intel_16等数十种文件.

  • srec_cat 转换,合并文件
  • srec_cmp 比较文件,可以比较hex和bin
  • srec_info 查看文件信息

常用例子

常用选项

  1. Disable_Sequence_Warnings 这个是因为如果输入的Intel HEX文件的记录未按升序地址顺序排序,则此选项会禁止发出警告。由OH51,OHX51,OH251或OH166生成的HEX文件未按升序地址顺序排序。
  2. address-length =2或3或4
    指定Intel HEX输出文件中的地址字节数。默认情况下,srec_cat会生成扩展地址记录(类型04),地址范围最大为4GB。如果要避免生成扩展地址记录,请在指定输出文件之前指定 address-length = 2。这限制了最大值。地址空间为64K,可用于大多数8051应用程序。
  3. Output_Block_Size = ByteCount
    指定每个HEX记录的长度。默认情况下,srec_cat生成包含最多32个字节数据的行。如果你想限制最大值。行长为16字节(与OH51,OHX51,OH251或OH166兼容),使用-Output_Block_Size = 16。

一个实际的例子


if exist ..\\*256* ( set lenth="0x40000"
) else (set lenth="0x80000"
)rm *.bin
rm *.hexcopy  ..\app.hex app.hexcopy  ..\boot.hex boot.hexmd HEX阅读器srec_cat.exe -o boot.bin -binary boot.hex -Intel -fill 0xff 0x0000 0x3000srec_cat.exe -o app.bin -binary app.hex -Intel  -fill 0xff 0x3000 %lenth%srec_cat.exe -o ok_0xFF.bin -binary boot.bin -binary -fill 0xff 0x00000 0x3000 app.bin -binary -crop 0x3000 %lenth%  -fill 0xFF 0x3000 %lenth%srec_cat.exe -o ok_0xFF.hex -Intel ok_0xFF.bin -binary -Output_Block_Size=16srec_cat.exe -o ok.hex -Intel boot.hex -Intel app.hex -Intel -Output_Block_Size=16srec_info.exe  boot.hex -Intel app.hex -Intel  ok_0xFF.hex -Intel ok.hex -Intel  >info.txt hexcrc.exe ok_0xFF.hexsrec_cat.exe -o  HEX阅读器\app.hex.txt -Hexdump  app.hex -Intelsrec_cat.exe -o  HEX阅读器\boot.hex.txt -Hexdump boot.hex -Intelsrec_cat.exe -o  HEX阅读器\ok_0xFF.hex.txt -Hexdump ok_0xFF.hex -Intel

hex转bin

srec_cat.exe test.hex -intel -offset -0x3000 -o .out.bin -binary
  1. 如果不指定-offset -0xxxx 则bin从0开始

  2. keil生成的51的hex,地址并不是递增的,会有如下警告,加入-Disable_Sequence_Warning选项在exe后

    srec_cat.exe  12864.hex -intel -o a.bin -Binary
    srec_cat: 12864.hex: 11: warning: data records not in strictly ascending order(expected >= 0x0188, got 0x012C)

    正确用法

    srec_cat.exe -Disable_Sequence_Warning 12864.hex -intel  -o .out.bin -binary

数据填充

-fill 0xFF 0x0000 0x8000

具体可以看下文件合并的例子

文件合并

参考

srec_cat -output "1.bin" -binary 0x00000.bin -binary -fill 0xff 0x00000 0x10000 0x10000.bin -binary -offset 0x10000srec_cat.exe HexFile1.hex -Intel HexFile2.hex -Intel -o MergedHexFile.hex -Intel
  1. -output "1.bin" -binary 指定输出文件
  2. 0x00000.bin -binary第一个输入文件
  3. -fill 0xff 0x00000 0x10000先把0x00000到0x10000全部填充0xff(其实内部会先生成一个用于存储的文件)
  4. 0x10000.bin -binary -offset 0x10000,找到第二个bin文件把自己的地址偏移到0x10000开始

其他例子http://www.keil.com/support/docs/1144.htm

文件分割

详细例子 http://www.keil.com/support/docs/963.htm

srec_cat.exe HexFile.hex -Intel -crop 0x000000 0x007FFF -o HexFilePart1.hex -Intel
srec_cat.exe HexFile.hex -Intel -crop 0x008000 0x00FFFF -offset -0x008000 -o HexFilePart2.hex -Intel

另一个稍微复杂的

Content of SplitHexPart1.cmd command file:

# BL51 hex files are not sorted for ascending addresses. Suppress this warning
-disable-sequence-warning
# take HexFile.hex address area 0x000000-0x007FFF
.\OBJ\HexFile.hex -Intel -crop 0x000000 0x007FFF
#generate hex records with 16 byte data length (default 32 byte)
-Output_Block_Size=16
# generate a Intel hex file
-o .\OBJ\HexFilePart1.hex -Intel

Content of SplitHexPart2.cmd command file:

# BL51 hex files are not sorted for ascending addresses. Suppress this warning
-disable-sequence-warning
# take HexFile.hex address area 0x008000-0x00FFFF and shift it down to 0x000000
.\OBJ\HexFile.hex -Intel -crop 0x008000 0x00FFFF -offset 0x008000
#generate hex records with 16 byte data length (default 32 byte)
-Output_Block_Size=16
# generate a Intel hex file
-o .\OBJ\HexFilePart2.hex -Intel

Invocation of srec_cat.exe with two command files:

srec_cat.exe @SplitHexPart1.cmd
srec_cat.exe @SplitHexPart2.cmd

参考MDK计算CRC的文档an277.pdf

srec_cat SelfTestROM_Ex2.hex -intel -crop 0x00000 0x0FFFC -fill 0x00 0x00000 0x0FFFC -crc32-l-e 0x0FFFC -o SelfTestROM.0.hex -intel
srec_cat SelfTestROM_Ex2.hex -intel -crop 0x10000 0x1FFFC -fill 0x00 0x10000 0x1FFFC -crc32-l-e 0x1FFFC -o SelfTestROM.1.hex -intel
srec_cat SelfTestROM_Ex2.hex -intel -crop 0x20000 0x2FFFC -fill 0x00 0x20000 0x2FFFC -crc32-l-e 0x2FFFC -o SelfTestROM.2.hex -intel
srec_cat SelfTestROM_Ex2.hex -intel -crop 0x30000 0x3FFFC -fill 0x00 0x30000 0x3FFFC -crc32-l-e 0x3FFFC -o SelfTestROM.3.hex -intel

加入CRC

这里的意思是转换生成的bin,最后4字节存着前面到倒数4字节前的CRC32

参考MDK计算CRC的文档an277.pdf,里面有单个文件的crc,还有将一个hex分割成四个区域的代码算4个crc的方式 ,SelfTestROM代码链接

srec_cat SelfTestROM_Ex2.hex -intel -crop 0x00000 0x0FFFC -fill 0x00 0x00000 0x0FFFC -crc32-l-e 0x0FFFC -o SelfTestROM.0.hex -intel
  1. srec_cat SelfTestROM_Ex2.hex -intel读取hex

  2. -crop 0x00000 0x0FFFC -fill 0x00 读取的区域,没有的填充0x00

  3. 0x00000 0x0FFFC -crc32-l-e 0x0FFFC计算CRC,CRC放在0x0FFFC

  4. 代码中的定位

    uint32_t crc_nominal __attribute__((at(0x0003FFFC)));
    #define ROM_START 0x00000000
    #define ROM_LEN   0x0003FFFC

查看信息

srec_info.exe  SelfTestROM_Ex.hex -intel

使用命令集合的文本

  1. 新建一个文本

    -Disable_Sequence_Warnings    #disable warning about hex records not in ascending order
    MyInputFile.hex               #input file name
    -Intel                        #read input file in intel hex format
    -fill 0xFF 0x0000 0x8000      #fill gaps from 0x0000-0x7FFF (32K) with value 0xFF
    -Output_Block_Size=16         #generate hex records with 16 byte data length (default 32 byte)
    -address-length=2             #generate 16-bit address records (no extended adress records type 04)
    -o MyOutputFile.hex           #output file name
    -Intel                        #generate intel hex output file
  2. 使用命令srec_cat.exe @CommandFile

详细文件格式的描述

  • srec_aomf(5)
  • srec_ascii_hex(5)
  • srec_atmel_generic(5)
  • srec_binary(5)
  • srec_brecord(5)
  • srec_coe(5)
  • srec_cosmac(5)
  • srec_dec_binary(5)
  • srec_emon52(5)
  • srec_fairchild(5)
  • srec_fastload(5)
  • srec_formatted_binary(5)
  • srec_forth(5)
  • srec_fpc(5)
  • srec_idt(5)
  • srec_intel(5)
  • srec_intel16(5)
  • srec_logisim(5)
  • srec_mem(5)
  • srec_mif(5)
  • srec_mips_flash(5)
  • srec_mos_tech(5)
  • srec_motorola(5)
  • srec_msbin(5)
  • srec_needham(5)
  • srec_os65v(5)
  • srec_ppb(5)
  • srec_ppx(5)
  • srec_signetics(5)
  • srec_spasm(5)
  • srec_spectrum(5)
  • srec_stewie(5)
  • srec_tektronix(5)
  • srec_tektronix_extended(5)
  • srec_ti_tagged(5)
  • srec_ti_tagged_16(5)
  • srec_ti_txt(5)
  • srec_trs80(5)
  • srec_vmem(5)
  • [srec_wilson(5)](

附录:MDK的例子(谷歌翻译的)

用例

请参阅以下知识库文章如何使用srec_cat.exe实用程序和Keil微控制器开发工具转换,合并和拆分HEX和BINARY文件 。

一般HEX文件操作

  • 概述:分类英特尔HEX文件 - 生成一个英特尔HEX文件,其中:地址记录按升序排序,精确大小为32K,并用0xFF填充所有间隙
  • 概述:生成具有偶数个字符的HEX文件 - 生成一个Intel HEX文件,其中包含:偶数地址,每个记录中的偶数个字节,所有间隙都具有填充0xFF的奇数地址
  • μVision:HEX文件的起始和结束地址没有效果 - 生成一个精确大小为64K的Intel HEX文件并填充所有间隙0xFF
  • 一般:组合INTEL HEX文件的实用程序 - 合并两个没有地址重叠的HEX文件,或者两者之间有间隙
  • 一般:将两个应用程序合并到一个英特尔六进制文件中 - 合并两个没有地址重叠的HEX文件,或者两者之间存在间隙
  • 概述:分割HEX文件 - 将一个HEX文件分成两个HEX文件,其中一个具有地址范围的下半部分,另一个具有移动到地址0x0的高地址范围

用于8051设备的HEX文件操作

  • OH51:组合代码银行HEX文件 - 使用不同方法组合多个hex文件
  • LX51:为银行应用程序生成HEX文件 - 64K代码库,每个库中重复公共区域

ARM设备的HEX文件操作

  • ARM:将二进制映像包含到应用程序中 - 组合二进制文件并将它们包含在项目中

一般BINARY文件操作

  • 一般:从二进制文件制作六进制文件
  • 一般:从六进制文件制作二进制文件

其他应用

  • 一般:从二进制或十六进制数据创建C文件 - 从二进制文件生成.c和.h文件
  • 概述:创建MOTOROLA S-RECORD文件 - 从Intel Hex文件生成Motorola S-record文件
  • μVision:CRC示例使用ROM自检来执行ROM的启动和定期测试

教程

设置工具以在每个项目构建/重建后执行srec_cat.exe

  1. 打开μVision
  2. 选择下拉菜单项目 - >目标选项,然后单击用户** 选项卡
  3. 下面生成后/重建检查框 运行#1
  4. 对于user命令,使用命令选项调用srec_cat.exe。该键序列 #H可用于输入十六进制文件名。
  5. 例如:
srec_cat.exe #H -Intel -o SortedHexFile.hex -Intel

注意:如果需要许多参数,则使用命令文件会更容易。在μVision中使用srec_cat.exe的命令文件时,请确保将“@”字符加倍,否则μVision可能会将其解释为键序列。

句法

有关所有srec_cat.exe参数的完整说明,请参阅“ SRecord参考手册”。以下是一些对Keil工具有用的选项:

  • -Disable Sequence Warnings
    禁止显示输入文件的HEX记录未按升序地址顺序排序的警告消息。OH51,OHX51,OH251或OH166无法按地址升序生成HEX文件。
  • -address-length = 2或3或4
    英特尔HEX输出文件中的地址字节数(默认为4:生成扩展地址记录(类型04),地址范围最大为4GB)。在命令字符串中, address-length必须在before之前-o(指定输出文件)。
    对于非代码库8051应用程序:避免生成扩展地址记录。设置-address-length=2为将最大地址空间限制为64K。代码库应用程序可以大于64K。
  • -Output Block Size = ByteCount
    每个HEX记录的长度(默认为32:行包含最多32个字节的数据)。
    对于C51,C251,C166应用:设置 (与OH51,OHX51,OH251或OH166兼容)。 -Output*Block*Size=16
  • -fill FillValue StartAddress EndAddress
    使用指定的常量值填充未使用的区域。
    建议:使用值0xFF - 这对应于擦除闪存的值。
  • -crop StartAddress EndAddress
    仅从上一个输入文件加载指定的地址区域。将此选项与-offset。结合使用。
  • -offset Offset
    为上一个输入文件添加地址偏移量。允许正值或负值。将此选项与-crop。结合使用 。
  • -Intel
    将前面的文件名视为Intel Hex,例如,[input filename] -Intel=将输入文件解释为Intel HEX,或者[output filename] -Intel=在Intel HEX中生成输出文件
  • -Binary
    对待前面的文件名是二进制文件,例如,[input filename] -Binary=将输入文件解释为二进制文件,或者[输出文件名] -Binary=生成二进制文件的输出文件
  • @CommandFile
    命令文件可以包含srec_cat.exe的部分或全部调用参数。
    提示:使用“#”开始一行,将所有内容评论到该行的末尾。
  • -Motorola
    可以在输入或输出文件名之后使用,以指定输入文件应解释为Motorola S-Record文件,或输出文件应生成为Motorola S-Record文件。
  • -C-Array filename [-INClude]
    可以在输出文件名之后使用,以指定它应该作为带有可选包含文件的C源文件生成。

更多信息

  • 请参阅μVision用户指南中的 启动外部工具
  • 请参阅SRecord参考手册
  • 请参阅μVision用户指南中的工具参数的关键顺序
  • 一般:英特尔HEX文件格式
  • μVision:为基于臂的设备创建Intel Hex文件

也可以看看

  • ULINK:使用ULINK作为设备编程器
  • ARMLINK:在建筑物内生成二元输出
  • ARMCC:Arm编译器输出格式

另见8051

  • 请参阅OH51用户指南
  • 请参阅OHX51用户指南
  • LX51:为银行应用程序生成HEX文件

  • http://srecord.sourceforge.net/man/man5/srec_wilson.html)

转载于:https://www.cnblogs.com/zongzi10010/p/10229223.html

映像文件工具srec相关推荐

  1. 『收集』体验微软ImageX 玩转系统映像文件

    体验微软ImageX 玩转系统映像文件 http://www.sina.com.cn  2008年08月18日 07:47  IT168.com ImageX是微软开发的一款映像文件工具,其创建的Wi ...

  2. matlab光盘映像文件可以删除吗_DVD-Cloner 2020 for mac(DVD光盘刻录工具) 7.00.715

    DVD-Cloner Gold 2020版是功能强大的DVD光盘刻录工具,DVD-Cloner Gold 2020版可以轻松刻录光盘以及蓝光光盘,用户可以将任何的文件刻录到DVD光盘中,并可以制作为蓝 ...

  3. VMware或Hyper-V 工具ISO映像文件位置

    VMware或Hyper-V 工具ISO映像文件位置 对于Hyper-V: 在" Hyper-V集成组件ISO映像的完整路径"字段中,输入Hyper-V集成组件ISO映像的位置.需 ...

  4. [转载]在VirtualBox中收缩虚拟磁盘映像文件

    原文地址:在VirtualBox中收缩虚拟磁盘映像文件作者:bobby 由于经常要测试一些软件,我在VirtualBox虚拟机中安装了一套Windows.使用过虚拟机的朋友都知道,为了节省硬盘空间,一 ...

  5. 嵌入式linux ext4映像制作工具说明 real210_v62

    工具下载的地址为:http://download.csdn.net/detail/u010406724/6996813 有资源分,没分了,见谅. 有两个工具,其中make_ext4fs是制作工具,si ...

  6. 移植linux内核-映像文件,移植Linux内核-映像文件

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 http://tigerwang202.blogbus.com/logs/43927976.html 首先从Blackfin uCli ...

  7. 将windows7安装到映像文件方法总结

    [IT168 使用技巧]我们现在使用的Windows7只是一个beta版本,这个版本在正式版发行后是肯定要删除的.如何能安全体验新操作系统而不给现有系统造成影响是不少用户会考虑的问题.在我们安装双系统 ...

  8. 用rsync修复不完整的Linux光盘映像文件

    1.光盘映像下载过程中的验证码问题存在的原因: 有时是因为下载工具不支持所致使,比如有些下载工具不支持大于2G的文件,所以会出现本来是3G的文件,结果他就下载了2G,文件的不完整导致验证码的不一致:另 ...

  9. 无需转化直接使用ESD映像文件安装系统简明教程

    原版系统ISO镜像的sources文件夹中包含install.wim映像文件,将这个WIM文件"解压"(官方术语"Apply")后,可以看到和C盘的目录完全相同 ...

最新文章

  1. C语言从0到1·数据类型及其存储
  2. 阿里大数据技术如何进化?资深技术专家带你回顾
  3. 光学模拟 Android,基于Android的光学字符识别研究与实现
  4. iptables原理及规则
  5. C# 在数组中判断是否存在某个数组值
  6. CDN技术详解之系统架构
  7. 用CSS实现花里胡哨的按钮切换效果
  8. 号外,号外,《React Native移动开发实战》出版啦
  9. 影子卫士中文注册版+系统保护的尚方宝剑、、
  10. 自动光学检测(AOI)
  11. c语言FD_SET头文件,select()函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET
  12. 推荐三个可以裁剪视频的软件给你
  13. aise TypeError(f“{method_name}: `{super_param.name}` must be present“)
  14. arduino架子鼓_极客DIY:利用Arduino制作电子鼓
  15. CSGO饥荒服务器搭建保姆级教程
  16. PHP PDO 连接SQLSErver,php pdo连接sqlserver配置
  17. [工会网站建设方案-日志]第一阶段 策划:收集、整理、分析
  18. 【经验】无线传输——空中速率
  19. outlook2010查看邮箱服务器,怎么设置Microsoft Outlook2010邮箱
  20. 五子棋输赢算法php,js实现AI五子棋人机大战

热门文章

  1. rpg服务器无限刷金币bug,魔兽世界怀旧服:邮箱交易BUG无限刷金币?小号回档一次1000金!...
  2. HeadFirst设计模式笔记——工厂模式
  3. nodebb部署开发记录
  4. 弘辽科技:拼多多24小时不发货怎么办?如何发货?
  5. 推荐几个全网最全的程序员接私活地方法或完整攻略或常用平台以及接单的注意事项(以免被雇主坑),比如国内的程序员客栈、CODING 码市,国外的Upwork、Freelancer、Dribbble等。
  6. 2019年软件QA与测试八大关键词
  7. 数据采集 - 获取【码市】最新发布需求,并实时通知用户 案例二
  8. 这是一篇路由器踩坑的文章
  9. 哈哈哈 一个小玩意 感觉就是一个引子 可以拿来玩
  10. python import 类如何捕获clrt c_PEP8 python规范神器