这是命令 srec_examples,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器
程序:
您的姓名
srec_examples - 如何使用 SRecord 的示例
商品描述
这个 srec_cat 命令非常强大,因为能够组合输入过滤器
以几乎无限的方式。 本手册页描述了其中的一些。
本手册页描述了如何使用各种输入文件、输入过滤器和输入
发电机。 但这些只是示例,有关更完整的详细信息,请参阅 srec_输入(1)
手册页。
这个 命令 线 是 太 长
如果你被困在一个命令行长度限制短得离谱的操作系统上,
下面的一些命令可能太长了。 你可以绕过这个障碍
将你的命令行放在一个文件中,比如 弗雷德.txt,然后告诉 srec_cat(1) 阅读本文
文件的其余命令行,像这样
srec_cat @fred.txt
这也有允许评论的好处,允许你写你的命令行
多行选项,甚至缩进以使命令更清晰。 注释
开始于“#”并延伸到行尾。 空行被忽略。
当然,你总是可以升级到 Linux,它已经少了超过 27
几年了。
您的 例子 通缉
如果你有聪明的使用 SRecord 的方法,或者已经解决了一个难题
SRecord,您可以为本手册页做出贡献,使其对每个人都更有用。
通过电子邮件将您的示例发送到本手册页末尾的电子邮件地址。
转换中 文件 FORMATS
最简单的事情 srec_cat(1) 可以做的是从一种 EPROM 文件格式转换为
其他。 请记住,当您阅读本节时,您可以执行其中的许多操作
在一个命令中同时进行。 它们只是分开拆开来制作
更容易理解。
英特尔 至 摩托罗拉
最简单的示例之一是将文件从 Intel 十六进制格式转换为 Motorola S-
记录格式:
srec_cat 英特尔文件 -英特尔-o 记录文件
请注意,格式说明符紧跟在它所描述的文件的名称之后。
选择 SRecord 理解的任意两种格式,它可以在所有格式之间进行转换。
(除了只写的汇编器、BASIC、C 和 FPGA 输出。)
摩托罗拉 至 英特尔
以另一种方式转换同样简单:
srec_cat 记录文件 -o 英特尔文件 -英特尔
默认格式为 Motorola S-Record 格式,所以后面不需要指定
文件名。
不同 形状 of 这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 同 格式
令人遗憾的是,一些笨拙的 EPROM 程序员只实现了一部分
用于表示其十六进制文件的规范。 例如,一些编译器
产生“s19”摩托罗拉数据(即S1数据记录与S9开始记录,16位
地址字段),除了一些笨拙的 EPROM 程序员坚持
“s37”摩托罗拉数据(即S3数据记录与S7起始记录,32位地址
字段)。
可以使用 -地址长度
选项:
srec_cat short.srec -o long.srec -address-length=4
此命令表示在输出上使用四字节(32 位)地址。
本节也适用于 Intel hex 文件,因为它们也可以选择
来自各种地址宽度。 使用
同 -地址长度 选项:
srec_cat i32.hex -o i16.hex -address-length=3
此命令表示在输出上使用“i16hex”20 位分段地址。 地址长度
4 是默认值(“i32hex”32 位线性寻址),地址长度为 2
请求“i8hex”16 位寻址。
LINE 长度
时不时你会遇到一个无力应付的EPROM程序员
对于长文本行,他们假设每行只有 46 个字符,并且
barf 当他们看到默认的线长 srec_cat(1) 写(或更糟的是,得到一个堆栈
涂鸦和崩溃)。
摩托罗拉 S-record 格式定义允许最多 255 字节的有效载荷,或
514 字符,加上行终止。 所有 EPROM 编程器 应该 有足够的
大行缓冲区来处理这么大的记录。 很少有人这样做。
-line-length 选项可用于指定最大行长度(不包括
换行符)用于输出。 例如,摩托罗拉十六进制的 16 字节有效载荷
srec_cat long.srec -o short.s19 -line-length=46
行长度选项与地址长度选项交互,所以一些修补
针对您的特定情况进行优化,许多是必要的。
输出 阻止 尺码
每隔一段时间你就会遇到一个古老的愚蠢的 EPROM 程序员,他不能
处理长数据记录时,他们假设最多只有 16 个字节的
每条记录的数据,以及当他们看到默认的 32 字节有效负载时 barf srec_cat(1)
写(或者更糟的是,缓冲区溢出导致高高的草丛在你的
EPROM)。
英特尔十六进制格式定义允许每条记录最多 255 字节的有效载荷数据。 全部
EPROM 编程器 应该 有足够大的数据缓冲区来处理这个记录
大。 祝你好运。
-Output-Block-Size 选项可用于指定要使用的记录数据大小
输出。 例如,具有 16 字节有效载荷的英特尔十六进制:
srec_cat 长.srec -o 短.hex -intel -obs=16
注意不要把 -obs 输出文件名和格式之间的选项
说明符。
刚 这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 数据, 请
有一些笨蛋EPROM程序员只能处理数据记录,并且
无法处理头记录或执行起始地址记录。 如果你有这个
问题, -仅数据 选项可用于抑制除
数据。 实际效果当然要看格式,因为有些没有这些
反正有特点。
这个 -仅数据 选项是简写。 可能有四个属性 -禁用 or
- 启用 分别地。 见 srec_cat(1) 用于说明的手册页 -禁用 和
- 启用 选项。
例如,您的尼安德特人 EPROM 程序员需要带有标题记录的摩托罗拉十六进制
(S0),但没有数据计数 (S5) 记录。 不使用 -仅数据 选项让它呕吐
数据计数记录,但使用 -仅数据 选项在丢失的标题上有它的barf
记录。 使用 -禁用=数据计数 选项将保持标题记录不变,而
抑制数据计数记录。
时间 头
这个 srec_cat(1) 命令总是尝试不改变地通过头记录,无论何时
他们在场。 它甚至尝试在文件格式更改时将它们保留到极限
文件格式能够。
如果没有文件头记录并且您想添加一个,或者您希望覆盖
现有的文件头记录,使用 -标题=绳子 选项。 您需要引用
如果它包含空格或外壳元字符,则为字符串(以将其与外壳隔离)。
执行 开始 地址
这个 srec_cat(1) 命令总是试图通过执行起始地址(通常是
发生在文件的末尾),只要它们存在。 它们被调整到
与数据记录 -抵消 筛选。 它甚至尝试跨文件保存它们
格式更改,以限制文件格式的能力。
如果没有执行起始地址记录,您想添加一个,或者您希望
要覆盖现有的执行起始地址记录,请使用 -执行-开始-
地址=数 选项。
请注意:执行起始地址与中的首地址是不同的概念
记忆您的数据。 将其视为监视器跳转到的“转到”地址,当
十六进制加载完成。 如果要更改数据在内存中的起始位置,请使用
-抵消 过滤。
定影 校验和
一些嵌入式固件开发人员背负着轻率的工具,这些工具产生
不正确的校验和,更警惕的 EPROM 程序员模型不会接受。
要修复文件的校验和,请使用 -忽略校验和 选项。 例如:
srec_cat 损坏.srec -ignore-checksums -o fixed.srec
中的校验和 损坏的.srec 被解析(如果它们不存在,它仍然是错误的)但是是
没有检查。 所结果的 固定文件 文件具有正确的校验和。 这 -忽略校验和
选项仅适用于输入。
此选项可用于任何具有校验和的文件格式,包括 Intel 十六进制。
发现 神秘 格式
查看 什么是 格式 Is 这个? 下面的部分,关于如何发现和转换神秘的 EPROM
加载文件格式。
BINARY FILES
可以与二进制文件相互转换。 你甚至可以混合二进制文件和
其他格式在同一个 srec_cat(1) 命令。
撰稿 二进制 档
读取十六进制文件并将其转换为二进制文件的最简单方法如下所示:
srec_cat fred.hex -o fred.bin -二进制
这将读取摩托罗拉十六进制文件 弗雷德.srec 并将其写到 弗雷德·宾 作为原始
二进制的。
请注意,数据被放入二进制文件中指定的字节偏移处
hex 文件中的地址。 如果数据中存在漏洞,则用零填充。
当然,这在链接器输出中很常见,其中代码从
记忆中的特定位置。 例如,当您有一张从 0x100000 开始的图像时,
输出二进制文件的前 1MB 将为零。
您可以使用类似的命令自动取消此偏移量
srec_cat fred.hex -offset - -minimum-addr fred.hex -o fred.bin
上面的命令通过偏移 弗雷德.hex 文件在内存中最少
地址在 弗雷德.hex 文件的数据。
另见 srec_二进制文件(5) 手册页以获取更多详细信息。
阅读 二进制 档
读取二进制文件并进行转换的最简单方法如下所示
srec_cat fred.bin -二进制 -o fred.srec
这将读取二进制文件 弗雷德·宾 并将其所有数据再次写回
摩托罗拉 S-Record 文件。
通常,这个二进制文件在地址空间中并不完全是您想要的位置,因为它是
假定驻留在地址零。 如果您需要移动它,请使用 -抵消 过滤。
srec_cat fred.bin -二进制 -offset 0x10000 -o fred.srec
您还需要避免填充零的文件“漏洞”。 您可以使用 -庄稼
过滤器,你可以使用 - 未填充 如果您不知道数据的确切位置,请进行过滤。
srec_cat fred.bin -binary -unfill 0x00 512 -o fred.srec
上面的命令删除长度为 512 字节或更长的零字节的运行。 如果你的
文件包含 1GB 的前导零字节,这会很慢,最好使用
这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 dd(1) 命令先切片。
加盟 FILES 一起
这个 srec_cat 命令的名称来自 UNIX 猫(1) 命令,它的缩写
“连接”或“加入”。 这 srec_cat 命令将 EPROM 加载文件连接在一起。
全部 In 一个
将 EPROM 加载文件连接到一个文件中很简单,只需将多个文件命名为
您需要的命令行:
srec_cat 输入文件1 输入文件2 -o 输出文件
此示例是所有摩托罗拉 S-Record 文件,因为这是默认格式。 你可以
在一个命令中有多种格式,并且 srec_cat(1) 仍然有效。 你甚至不
必须输出相同的格式:
srec_cat 输入文件1 -光谱 输入文件2 ——李约瑟
-o 输出文件 -符号学
这些都是古老的格式,但是必须混合搭配英特尔的情况并不少见
和摩托罗拉格式在一个项目中。
过滤 后 加入
有时您想将两组数据连接在一起,然后应用过滤器
到合并的结果。 为此,您可以使用括号。
srec_cat
'('
入档 -排除 0xFFF0 0x10000
-生成 0xFFF0 0xFFF8 -重复字符串“香蕉”
')'
-b-e-长度 0xFFF8 4
-b-e-checksum-neg 0xFFFC 4 4
-o 输出文件
上面的示例命令连接了一个输入文件(排除了生成的数据区域)
用一个常量字符串。 这个链接的输入然后被过滤以添加一个 4 字节的长度,并且
一个 4 字节的校验和。
加入 端到端
EPROM 加载文件中的地址范围经常会重叠。 你会得到一个
错误,如果他们这样做。 如果两个文件都从地址 XNUMX 开始,因为每个文件都进入一个
单独的 EPROM,您可能需要使用偏移过滤器:
srec_cat 输入文件1
输入文件2 -偏移0x80000
-o 输出文件
有时您希望这两个文件完全遵循彼此,但您不知道
提前抵消:
srec_cat 输入文件1
输入文件2 -offset -maximum-addr 输入文件1
-o 输出文件
请注意,之前是数字 (0x80000) 的地方,现在有一个计算 (-maximum-
地址 输入文件1)。 这在大多数可以使用数字的地方都是可能的(还有 -minimum-addr 和
-范围)。
裁剪 “ 数据
可以复制 EPROM 加载文件,选择要保留的地址和要保留的地址
丢弃。
什么是 至 保持
一个常见的活动是裁剪您的数据以匹配您的 EPROM 位置。 您的链接器可能会添加
其他你不感兴趣的垃圾, 例如 在 RAM 位置。 在这个例子中,
在 1MB 边界处有一个 2MB EPROM:
srec_cat 入档 -裁剪 0x200000 0x300000
-o 输出文件
所有地址范围的下限都是包含的,上限是不包括的。 如果你
减去它们,你得到字节数。
门店地址 抵销
很可能,您有一个愚蠢的 EPROM 程序员,如果 EPROM 映像
不是从零开始。 找出究竟在哪里 不 在内存中启动,使用
srec_信息(1) 命令:
$ srec_信息 例子.srec
格式:摩托罗拉 S-Record
标题:extra-whizz 工具链链接器
执行起始地址:0x00200000
数据:0x200000 - 0x32AAEF
$
而不是屠宰链接器命令文件,只需偏移地址:
srec_cat 入档 -裁剪 0x200000 0x300000 -偏移 -0x200000
-o 输出文件
请注意,给出的偏移量是 负,它具有从该值中减去该值的效果
输入记录中的所有地址,形成输出记录地址。 在这种情况下,
将图像移回零。
此示例还演示了如何将输入过滤器链接在一起:首先
裁剪,然后是偏移量,所有这些都在一个命令中,无需临时文件。
如果您想要做的只是将数据从地址零开始偏移,这可以是
自动化,所以你不必提前知道最小地址,通过使用 srec_cat's
能够在命令行上计算一些东西:
srec_cat 入档 -offset - -minimum-addr 入档
-o 输出文件
注意减号两边的空格,它们是强制性的。
什么是 至 扔 客场
有时您需要从 EPROM 加载文件中排除小地址范围,
而不是想要保持一个小的地址范围。 这 -排除 过滤器可用于
这个目的。
例如,如果您希望排除序列号所在的地址范围
嵌入式设备被保留,比如 0x20 处的 0x100 字节,你可以使用这样的命令:
srec_cat input.srec -排除 0x100 0x120 -o output.srec
这个 输出文件 文件将在必要位置的数据中留下一个洞。
请注意,您可以同时拥有 -庄稼 和 -排除 在同一个命令行上,无论哪个有效
更自然地适合您的情况。
不连续的 门店地址 射击场
地址范围不必是单个范围,您可以使用
不止一对。
srec_cat 入档 -裁剪 0x100 0x200 0x1000 0x1200
-o 输出文件
此过滤器导致来自 0x100..0x1FF 的数据和来自 0x1000..0x1200 的数据通过
通过,其余的被丢弃。 这比链接一个更有效 -庄稼 和
-排除 一起过滤。
移动 事物 周围
还可以向前和向后更改数据记录的地址。
也可以重新排列数据记录在内存中的位置。
抵销 筛选
这个 -偏移=数 filter 对记录的地址进行操作。 如果数字是正数
地址在内存中移高了许多字节,负值移低了。
srec_cat 入档 -裁剪 0x200000 0x300000 -偏移 -0x200000
-o 输出文件
上面的示例将 1x0 处的 200000MB 数据块向下移动到零(偏移量为
负) 并丢弃其余数据。
字节 交换
有时需要交换数据中的字节,在 big-
通常是 endian 和 little-endian 数据。
srec_cat 入档 -字节交换 4 -o 输出文件
这将反转 32 位值(4 个字节)中的字节。 默认情况下,如果您不提供宽度,
是将字节反转为 16 位值(2 个字节)。 您实际上可以使用任何奇怪的值
就像,它甚至不必是 2 的幂。也许 64 位(8 字节)可能有用
一天。
二进制 输出
您需要注意输出中的二进制文件,因为这些空洞都填充了零。
位于 100 位寻址内存顶部的 32kB 程序将生成一个 4GB 的文件。 看
srec_二进制文件(5)对于如何理解和避免这个问题,通常与 -抵消 过滤。
拆分 an 图片
如果您有一个 16 位数据总线,但您使用两个 8 位 EPROM 来保存您的固件,
您可以通过使用生成偶数和奇数图像 -分裂 筛选。 假设你的
固件在 固件.hex 文件,使用以下内容:
srec_cat 固件.hex -split 2 0 -o 固件.even.hex
srec_cat 固件.hex -split 2 1 -o 固件.odd.hex
这将产生两个必要的 EPROM 映像。 请注意,输出地址是
除以分割倍数,因此如果您的 EPROM 图像处于特定偏移量(例如
0x10000,在下面的例子中),你需要去除偏移量,然后替换它...
srec_cat 固件.hex
-偏移-0x10000 -分割2 0
-offset 0x10000 -o 固件.even.hex
srec_cat 固件.hex
-偏移-0x10000 -分割2 1
-offset 0x10000 -o 固件.odd.hex
请注意应用多个过滤器的能力如何简化否则会变得很多
更长的脚本。
条带化
第二种用途 -分裂 过滤器是内存条带化。
您不必拆分为字节宽度的部分,您可以选择其他大小。 这是常见的
想把32位宽的数据转换成两组16位宽的数据。
srec_cat 固件.hex -split 4 0 2 -o 固件.01.hex
srec_cat 固件.hex -split 4 2 2 -o 固件.23.hex
这相对容易理解,但您可以使用更宽的条纹。
在下一个示例中,硬件要求 512 字节的块在 4
EPROM。 生成 4 个图像将按如下方式完成:
srec_cat 固件.hex -split 0x800 0x000 0x200 -o 固件.0.hex
srec_cat 固件.hex -split 0x800 0x200 0x200 -o 固件.1.hex
srec_cat 固件.hex -split 0x800 0x400 0x200 -o 固件.2.hex
srec_cat 固件.hex -split 0x800 0x600 0x200 -o 固件.3.hex
非对称 条带化
一个更特殊的条带示例是 Microchip dsPIC33F 微控制器,它具有
奇怪的内存存储模式,他们能够在一个地址中存储 3 个字节
仅包含 2 个字节。 结果是一个 XNUMX 进制文件,其顶部字节填充为零(小
endian),并且所有地址都比它们在芯片中的地址翻倍。 这是一个
例:
S1130000000102000405060008090A000C0D0E0098
S1130010101112001415160018191A001C1D1E00C8
S1130020202122002425260028292A002C2D2E00F8
S1130030303132003435360038393A003C3D3E0028
要摆脱 00 填充字节,只留下 3/4 有效字节,您还可以使用
分离过滤器,带有附加的 宽度 论证,像这样:
srec_cat 示例.srec -split 4 0 3 -o no_dross.srec
这会生成一个删除了 00 填充字节的文件。 它看起来像这样:
S113000000010204050608090A0C0D0E1011121451
S1130010151618191A1C1D1E2021222425262829EC
S11300202A2C2D2E30313234353638393A3C3D3E87
请注意地址也是大小的 3/4。 您可以使用
-未拆分 和 -填充=0 过滤器。
不分裂 图片
未拆分过滤器可用于反转拆分过滤器的效果。 请注意,
地址范围扩大,在条带之间留下孔。 通过使用所有条纹,
完整的输入被重新组装,没有任何孔。
srec_cat -o 固件.hex
固件.even.hex -unsplit 2 0
固件.odd.hex -unsplit 2 1
上面的例子颠倒了前面的 16 位数据总线例子。 一般来说,你不分裂
使用与您拆分的相同参数。
填充 “ 空白
通常 EPROM 加载文件中会有“漏洞”,即编译器和链接器所做的地方
不放任何东西。 出于某些目的,这是可以的,而对于其他目的,必须采取某些措施
对孔进行处理。
这个 填 筛选
可以填补您的数据不存在的空白。 最简单的例子
这填满了整个 EPROM:
srec_cat 入档 -填充 0x00 0x200000 0x300000 -o 输出文件
此示例用零填充孔(如果有)。 您必须指定一个范围 - 带有
32 位地址空间,填充一切生成 巨大 加载文件。
如果您只想填补数据中的空白,而不想填补整个 EPROM,
尝试:
srec_cat 入档 -填充 0x00 -over 入档 -o 输出文件
此示例演示了这样一个事实,即无论在何处指定地址范围,
-过度 和 -之内 可以使用选项。
卸货 这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 空白
从芯片中读取 EPROM 映像后,通常需要“取消填充”它。 通常,
它将所有的孔都填满 0xFF(你没有编程的 EPROM 区域显示
当您读回它们时为 0xFF)。
要删除数据中的所有 0xFF 字节,请使用此过滤器:
srec_cat 入档 -未填充0xFF -o 输出文件
这将摆脱 所有 0xFF 字节,包括您实际想要的字节。
有两种方法可以解决这个问题。 首先,您可以指定最小运行长度
取消填充:
srec_cat 入档 -unfill 0xFF 5 -o 输出文件
这表示运行 1 到 4 个字节的 0xFF 是可以的,并且应该只创建一个洞
连续运行 5 个或更多 0xFF 字节。 第二种方法是重新填充
中间差距:
srec_cat 输出文件 -填充 0xFF -over 输出文件
-o 输出文件2
您选择哪种方法取决于您的需要以及 EPROM 中数据的形状。
您可能需要结合使用这两种技术。
门店地址 范围 填充
某些数据格式为 16 位宽,如果是,则自动填充 0xFF 字节
需要填写数据中没有的单词的另一半。 如果你需要
填充不同的值,您可以使用这样的命令:
srec_cat 入档 - 填充0x0A
-之内 入档 -范围填充2
-o 输出文件
这为填充过滤器提供了根据输入文件的详细信息计算出的地址范围。
地址范围是数据覆盖的所有地址范围 入档,扩展
在每个子范围的开头向下(如果需要)到 2 字节倍数并扩展
在每个子范围的末尾向上(如果需要)到 2 字节的倍数。 这也有效
对于更大的倍数,例如闪存芯片的 1kB 页边界。 此地址范围填充
适用于任何需要地址范围的地方。
填 - 版权
可以用重复的版权信息填充 EPROM 未使用的部分。
任何试图对您的 EPROM 进行逆向工程的人都会看到
他们的十六进制编辑器。
这是通过两个输入源完成的,一个来自数据文件,一个来自
即时生成。
srec_cat 入档
- 生成 '(' 0 0x100000 -minus -within 入档 ')'
-repeat-string 'Copyright (C) 1812 Tchaikovsky。 '
-o 输出文件
注意数据生成的地址范围:它需要你的地址范围
EPROM,在本例中为 1MB,从 0 开始,并从中减去所使用的地址范围
输入文件。
如果您想使用当前年份编写脚本(因为 1812 有点过时),请使用
外壳的输出替换(反引号)能力:
srec_cat 入档
- 生成 '(' 0 0x100000 -minus -within 入档 ')'
-repeat-string“版权所有(C)`日期+%Y`柴可夫斯基。”
-o 输出文件
指定的字符串一遍又一遍地重复,直到填满所有的洞。
混淆 - 噪声
有时您想用噪声填充 EPROM 图像,以隐藏真实数据的位置
停止和开始。 你可以用 -随机填充 过滤。
srec_cat 入档 -随机填充 0x200000 0x300000
-o 输出文件
它的工作原理就像 -充满 过滤器,但使用随机数而不是常量字节
计算值。
填 通过 16 位 话
当用常量字节值填充图像不起作用时,您需要一个常量
16 位字值,请使用 -重复数据 生成器,这需要任意长的时间
用作填充模式的字节序列:
srec_cat 入档
-generator '(' 0x200000 0x300000 -minus -within 入档 ')'
-重复数据0x1B 0x08
-o 输出文件
注意生成器的地址范围如何再次避免被占用的地址范围
这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 入档的数据。 您必须自己正确处理字节顺序。
插入 恒 数据
有时你会想要插入常量数据,或者不是由你的数据产生的数据。
编译器或汇编器,进入您的 EPROM 加载图像。
二进制 手段 字面
一种简单的方法是在文件中包含所需的信息。 插入文件的
内容从字面上看,没有格式解释,使用 二进制 输入格式:
srec_cat 入档 -二进制 -o 输出文件
可能有必要使用 抵消 过滤以将数据移动到您的位置
实际上想要它在图像中:
srec_cat 入档 -二进制-偏移量 0x1234 -o 输出文件
也可以使用标准输入作为数据源,这有助于
被脚本化。 例如,要将当前日期和时间插入到 EPROM 加载文件中,
你可以使用管道:
日期 | srec_cat - -bin -offset 0xFFE3 -o 输出文件
特殊文件名“-”表示从标准输入读取。 的输出 日期
命令的长度始终为 29 个字符,并且显示的偏移量会将其放在
64KB EPROM 映像。
重复 一旦
这个 填 - 版权 上面的部分显示了如何一遍又一遍地重复字符串。 我们
可以使用单个重复插入字符串一次。
srec_cat -生成 0xFFE3 0x10000 -重复字符串“`日期`”
-o 输出文件
注意数据生成的地址范围如何与数据的长度完全匹配
日期(1) 输出大小。 当然,您可以将输入文件添加到上面 srec_cat(1)
命令将您的 EPROM 映像与日期和时间联系起来。
插入 A 长
另一种可能性是将 Subversion 提交号添加到您的 EPROM 映像中。 在这
例如,我们在地址 4x0 处插入一个 0008 字节的小端值。 这
Subversion 提交号在 $版本 本例中的 shell 变量:
srec_cat -生成 0x0008 0x000C -l‐e‐常量 $版本 4
入档 -排除 0x0008 0x000C
-o 输出文件
请注意,我们使用过滤器来确保输入中有一个漏洞,其中版本号
去,以防万一链接器把东西放在那里。
数据 关于我们 “ 数据
可以将有关数据的各种数据添加到输出中。
校验和
这个 -big-endian-checksum-negative 过滤器可用于对数据求和,然后插入
总和的负数到数据中。 这具有总和为零的效果,当
如果总和宽度与插入的值宽度相匹配,则校验和本身是相加的。
srec_cat 入档
-作物 0 0xFFFFFC
-随机填充 0 0xFFFFC
-b-e-checksum-neg 0xFFFFFC 4 4
-o 输出文件
在这个例子中,我们在最低兆字节的内存中有一个 EPROM。 -crop 过滤器
确保我们只汇总 EPROM 中的数据,而不是其他任何地方。 这
-random-fill 过滤器用随机值填充数据中留下的任何空洞。 最后,-b-
e-checksum-neg 过滤器在最后插入一个大端格式的 32 位(4 字节)校验和
4 字节的 EPROM 映像。 自然地,这个过滤器有一个小端版本,如
井。
您的嵌入式代码可以使用类似于以下的 C 代码检查 EPROM:
无符号长*开始=(无符号长*)0;
无符号长*结束=(无符号长*)0x100000;
无符号长总和 = 0;
而(开始 < 结束)
总和 += *开始++;
如果(总和!= 0)
{
哎呀
}
这个 -big-endian-checksum-bitnot 过滤器类似,除了对校验和求和
应该产生全一位 (-1) 的值。 例如,使用短裤而不是长期:
srec_cat 入档
-作物 0 0xFFFFFE
- 填充 0xCC 0x00000 0xFFFFFE
-b-e-checksum-neg 0xFFFFFE 2 2
-o 输出文件
假设您选择了正确的字节序过滤器,您的嵌入式代码可以检查 EPROM
使用类似于以下的 C 代码:
无符号短*开始=(无符号短*)0;
无符号短 *end = (无符号短 *)0x100000;
无符号短和 = 0;
而(开始 < 结束)
总和 += *开始++;
如果(总和!= 0xFFFF)
{
哎呀
}
还有一个 -b-e-校验和阳性 过滤器和一个匹配的小端过滤器,它
插入简单的总和,并将在 C 中使用相等测试进行检查。
srec_cat 入档
-作物 0 0xFFFFFF
- 填充 0x00 0x00000 0xFFFFFF
-b-e-checksum-neg 0xFFFFFF 1 1
-o 输出文件
假设您选择了正确的字节序过滤器,您的嵌入式代码可以检查 EPROM
使用类似于以下的 C 代码:
无符号字符 * 开始 = (无符号字符 *)0;
无符号字符 *end = (无符号字符 *)0xFFFFF;
无符号字符总和 = 0;
而(开始 < 结束)
总和 += *开始++;
如果(总和!= *结束)
{
哎呀
}
在 8 位的情况下,使用 big-endian 还是 little-endian 并不重要
过滤。
快速 十六进制转储
您可以使用“十六进制转储”输出格式查看数据的校验和。 这是
用于查看计算值或调试 srec_cat(1) 命令前
在脚本中使其永垂不朽。
srec_cat 入档
-作物 0 0x10000
- 填充 0xFF 0x0000 0x10000
-b-e-校验和-负 0x10000 4
-裁剪 0x10000 0x10004
-o - -hex-dump
此命令读入文件,对数据进行校验和并将校验和放在 0x10000,
将结果裁剪为仅包含校验和,然后将校验和打印在
经典的十六进制转储格式的标准输出。 特殊文件名“-”表示
在这种情况下,“标准输出”。
循环 冗余 支票
简单的附加校验和有许多理论限制,与错误有关
他们可以也不能检测到。 CRC 方法的问题较少。
srec_cat 入档
-作物 0 0xFFFFFC
-填充0x00 0x00000 0xFFFFC
-b-e-crc32 0xFFFFC
-o 输出文件
在上面的例子中,我们在最低兆字节的内存中有一个 EPROM。 这 -庄稼 过滤
确保我们只汇总 EPROM 中的数据,而不是其他任何地方。 这 -充满
过滤器填充数据中留下的任何漏洞。 最后, -b-e-checksum-neg 滤芯 a
EPROM 映像的最后 32 个字节中的 big-endian 格式的 4 位(4 字节)校验和。
当然,这个过滤器也有一个小字节序版本。
校验和使用行业标准 32 位 CRC 计算。 因为 SRecord 是
开源,你可以随时阅读源代码,看看它是如何工作的。 有很多非
此代码的 GPL 版本可在 Internet 上获得,并且适合嵌入
专有固件。
还有一个 16 位 CRC 可用。
srec_cat 入档
-作物 0 0xFFFFFE
- 填充 0x00 0x00000 0xFFFFFE
-b-e-crc16 0xFFFFFE
-o 输出文件
校验和是使用 CCITT 公式计算的。 因为 SRecord 是开源的,所以您
可以随时阅读源代码,看看它是如何工作的。 有许多非 GPL 版本的
此代码可在 Internet 上获得,并且适合嵌入专有固件中。
您可以使用“十六进制转储”输出格式查看数据的 CRC。
srec_cat 入档
-作物 0 0x10000
- 填充 0xFF 0x0000 0x10000
-b-e-crc16 0x10000
-裁剪 0x10000 0x10002
-o - -hex-dump
此命令读入文件,计算数据的 CRC 并将 CRC 放在
0x10000,将结果裁剪为仅包含CRC,然后将校验和打印在
经典的十六进制转储格式的标准输出。
其中 Is My 数据?
您可能希望将 EPROM 映像的几个属性插入到
数据。
srec_cat 入档 -b-e-最小 0xFFFE 2 -o 输出文件
上面的例子插入了数据的最小地址(低 水) 到数据中,如
地址 0xFFFE 处的大端顺序的两个字节。 这包括最小值本身。 如果
数据已经包含给定地址的字节,您需要使用排除过滤器。
字节数默认为 4。
还有一个 -l-e-最小值 用于插入小端值的过滤器,以及另外两个
过滤器调用 -b-e-exclusive-minimum 和 -l-e-exclusive-minimum 不包括
minimum 本身在计算最小数据地址。
srec_cat 入档 -b-e-最大值 0xFFFFFC 4 -o 输出文件
上面的例子插入了数据的最大地址(高 水 + 1, 就像
地址范围)到数据中,作为地址 0xFFFFFC 处大端顺序的四个字节。
这包括最大值本身。 如果数据已经包含给定的字节
地址,您需要使用 -排除 筛选。 字节数默认为 4。
还有一个 -l-e-最大值 用于插入小端值的过滤器,以及另外两个
过滤器调用 -b-e-exclusive-maximum 和 -l-e-exclusive-maximum 不包括
maximum 本身在计算最大数据地址。
srec_cat 入档 -b-e-长度 0xFFFFFC 4 -o 输出文件
上面的例子插入了数据的长度(高 水 + 1 - 低 水) 进入
数据,作为地址 0xFFFFFC 处的大端顺序的四个字节。 这包括长度
本身。 如果数据在长度位置已经包含字节,则需要使用
-排除 筛选。 字节数默认为 4。
还有一个 -l-e-长度 用于插入小端长度的过滤器,以及 -是-
独占长度 和 -l-e-独占长度 不包括长度本身的过滤器
在计算中。
什么是 格式 Is 这个?
您可以使用以下命令获取有关 EPROM 加载文件的各种信息 srec_信息(1)
命令。 例如:
$ srec_信息 例子.srec
格式:摩托罗拉 S-Record
标题:“http://srecord.sourceforge.net/"
执行起始地址:00000000
数据:0000 - 0122
第0456章-0FFF
$
此示例显示该文件是摩托罗拉 S-Record。 文件头中的文本是
打印,连同执行起始地址。 最后一部分显示地址
包含数据的范围(每个子范围的上限是 in封闭的,而不是
ex命令行上使用的封闭形式。
$ srec_信息 一些奇怪的文件.hex -猜测
格式:Signetics
数据:0000 - 0122
第0456章-0FFF
$
上面的例子猜测 EPROM 加载文件格式。 这不是万无一失的,但通常是
做对了。 您可以使用 -猜测 任何你会给出明确格式的地方,但它
往往更慢,因此不推荐。 此外,对于自动构建
系统,您希望尽早出现硬错误; 如果文件不在预期中
格式,你想让它呕吐。
曼玲 “ 数据
可以通过多种方式更改数据字节的值。
srec_cat 入档 - 和 0xF0 -o 输出文件
上面的示例执行数据字节与 0xF0 掩码的按位与。 这
记录地址不变。 我真的想不出这个过滤器的用途。
srec_cat 入档 - 或 0x0F -o 输出文件
上面的示例执行数据字节与 0x0F 位的按位 OR。 这
记录地址不变。 我真的想不出这个过滤器的用途。
srec_cat 入档 -xor 0xA5 -o 输出文件
上面的示例执行数据字节与 0xA5 位的按位异或。
记录地址不变。 您可以使用它来混淆内容
你的EPROM。
srec_cat 入档 -不是 -o 输出文件
上面的示例执行数据字节的按位非。 记录的地址是
不变。 默默无闻的安全?
版权
srec_cat 1.58版
版权所有 (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
2010, 2011 彼得·米勒
这个 srec_cat 程序附带绝对没有保证; 有关详细信息,请使用 'srec_cat
-版本 执照' 命令。 这是免费软件,欢迎您重新分发
在一定条件下; 有关详细信息,请使用 'srec_cat -版本 执照' 命令。
使用 onworks.net 服务在线使用 srec_examples