これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、MAC OS オンライン エミュレーターなどの複数の無料オンライン ワークステーションの XNUMX つを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド srec_examples です。
プログラム:
NAME
srec_examples - SRecord の使用例
DESCRIPTION
当学校区の srec_cat このコマンドは、入力フィルターを組み合わせることができるため、非常に強力です。
ほぼ無制限の方法で。 このマニュアル ページでは、それらのいくつかについて説明します。
このマニュアル ページでは、さまざまな入力ファイル、入力フィルター、および入力の使用方法について説明します。
発電機。 ただし、これらは単なる例であり、より完全な詳細については、 srec_input(1)
マニュアルページ。
当学校区の コマンド ラインズ です。 あまりに 長い
コマンドラインの長さの制限が異常に短いオペレーティング システムを使用している場合、
続くコマンドの中には長すぎるものもあります。 このハンディキャップを回避するには、
コマンドラインをファイルに配置します。 フレッド.txt、そしてそれを伝えます srec_cat(1) これを読むには
このファイルのコマンドラインの残りの部分は次のようになります
srec_cat @fred.txt
これには、コメントを許可してコマンドラインを記述できるという利点もあります。
オプションを複数行にわたって記述し、コマンドをより明確にするためにインデントを追加することもできます。 コメント
「」から始めてください#”と列の最後まで伸ばします。 空白行は無視されます。
もちろん、いつでも Linux にアップグレードすることはできます。
今何年も。
あなたの 例 欲しいです
SRecord を賢く使用する方法がある場合、または SRecord で困難な問題を解決した場合
SRecord さんは、このマニュアル ページに貢献して、このマニュアル ページを誰にとってもさらに便利なものにしていただけます。
このマニュアル ページの最後にある電子メール アドレスに例を電子メールで送信してください。
変換 FILE 書式
最も単純なこと srec_cat(1) できることは、ある EPROM ファイル形式を次の形式に変換することです。
別。 このセクションを読むときは、これらの多くを実行できることに留意してください。
XNUMX つのコマンドで同時に実行できます。 別々に分解して作るだけです
理解しやすいです。
インテル 〜へ モトローラ
最も単純な例の XNUMX つは、ファイルを Intel hex フォーマットから Motorola S- に変換することです。
レコード形式:
srec_cat インテルファイル -インテル -o srec ファイル
形式指定子は、記述しているファイル名の直後に続くことに注意してください。
SRecord が理解できる XNUMX つの形式を選択すると、それらすべての間で変換できます。
(書き込み専用のアセンブラ、BASIC、C、および FPGA 出力を除きます。)
モトローラ 〜へ インテル
逆の変換も同様に簡単です。
srec_cat srec ファイル -o インテルファイル -インテル
デフォルトの形式は Motorola S-Record 形式であるため、後で指定する必要はありません。
ファイル名。
異なる 形状 of 同じ フォーマット
残念なことに、中途半端なバージョンの EPROM プログラマの中には、一部しか実装していないことがよくあります。
hex ファイルを表すために使用される仕様の。 たとえば、一部のコンパイラでは
「s19」モトローラ データ (つまり、S1 開始レコードを持つ S9 データ レコード、16 ビット) を生成します。
アドレス フィールド)、一部のブロックヘッド EPROM プログラマが主張することを除けば、これは問題ありません。
「s37」モトローラ データ (つまり、S3 開始レコードを持つ S7 データ レコード、32 ビット アドレス)
田畑)。
を使用して、ある Motorola シェイプから別のシェイプに変換できます。 -アドレス長
オプション:
srec_cat short.srec -o long.srec -address-length=4
このコマンドは、出力に 32 バイト (XNUMX ビット) のアドレスを使用することを指示します。
このセクションは、Intel hex ファイルにも適用されます。これらのファイルにも、
さまざまなアドレス幅から選択できます。 ある Intel シェイプから別の Intel シェイプに変換するには、
同じ -アドレス長 オプション:
srec_cat i32.hex -o i16.hex -address-length=3
このコマンドは、出力で「i16hex」20 ビットのセグメント化されたアドレスを使用するように指示します。 アドレス長
4 がデフォルト (「i32hex」32 ビット線形アドレス指定) であり、アドレス長 2 は次のようになります。
「i8hex」16 ビット アドレス指定を要求します。
LINE 長さ
時々、対処できない、気弱な EPROM プログラマーに遭遇することがあります。
長いテキスト行の場合、46 行あたり XNUMX 文字しか含まれないと想定しており、
barf は、デフォルトの行の長さを確認したときに、 srec_cat(1) 書き込み (さらに悪いことに、スタックを取得)
落書きとクラッシュ)。
Motorola S レコード フォーマット定義では、最大 255 バイトのペイロードまたは行を許可します。
514 文字と行末。 すべての EPROM プログラマー すべき 十分に持っている
これほど大きなレコードを処理するには、大きなライン バッファーが必要です。 そうする人はほとんどいません。
-line-length オプションは、行の最大長を指定するために使用できます (行長は含まれません)。
newline) が出力で使用されます。 たとえば、Motorola 16 進数の場合は XNUMX バイトのペイロード
srec_cat long.srec -o short.s19 -line-length=46
行の長さのオプションはアドレスの長さのオプションと相互作用するため、いくつかの工夫が必要です。
特定の状況に合わせて最適化することが必要になります。
出力 ブロック サイズ
時々、あなたは、何もできない古代の愚かな EPROM プログラマーに出会うことがあります。
長いデータレコードに対処するため、最大でも 16 バイトしか存在しないと想定しています。
レコードごとのデータ、およびデフォルトの 32 バイトのペイロードを確認したときのバーフ srec_cat(1)
書き込みます(さらに悪いことに、バッファオーバーランにより、高い草の上に落書きが発生します)
EPROM)。
Intel の 255 進形式の定義では、レコードごとに最大 XNUMX バイトのペイロード データが許可されます。 全て
EPROMプログラマ すべき レコードを処理するのに十分な大きさのデータ バッファーがある
大きい。 頑張ってください。
-Output-Block-Size オプションは、使用するレコード データ サイズを指定するために使用できます。
出力。 たとえば、16 バイトのペイロードを持つ Intel XNUMX 進数は次のようになります。
srec_cat long.srec -o short.hex -intel -obs=16
入れないように注意してください -obs 出力ファイル名と形式の間のオプション
指定子。
ただ データ、 お近くのLuxinar支社またはディストリビューターに
データ レコードのみを処理できるボーンヘッド EPROM プログラマがいくつかあります。
ヘッダーレコードや実行開始アドレスレコードには対応できません。 これを持っていれば
問題、 -データのみ オプションを使用すると、
データ。 もちろん、実際の効果はフォーマットによって異なります。なぜなら、これらを持たないフォーマットもあるためです。
とにかく特徴。
当学校区の -データのみ オプションはショートハンドです。 次の XNUMX つのプロパティがあります。 -無効 or
-enabled 別々に。 を参照してください。 srec_cat(1) の説明のためのマニュアルページ -無効
-enabled オプション。
たとえば、ネアンデルタール人の EPROM プログラマーには、ヘッダー レコードを備えた Motorola hex が必要です。
(S0) ですが、データ カウント (S5) レコードはありません。 を使用していない -データのみ オプションでバーフがオンになっています
データ数レコードですが、 -データのみ オプションで、欠落しているヘッダーにバーフを付けることができます
記録。 の使用 -disable = data-count このオプションでは、ヘッダー レコードはそのまま残りますが、
データ数の記録を抑制します。
Rescale データ ヘッダ
当学校区の srec_cat(1) コマンドは常にヘッダー レコードを変更せずに通過しようとします。
彼らは存在します。 ファイル形式が変更されても、限界まで保存しようとします。
ファイル形式が可能です。
ファイル ヘッダー レコードがなく、それを追加したい場合、またはファイル ヘッダー レコードをオーバーライドしたい場合
既存のファイル ヘッダー レコードの場合は、 -ヘッダ=string オプション。 引用する必要があります
文字列にスペースまたはシェルのメタ文字が含まれている場合は、それをシェルから隔離します。
実行 お気軽にご連絡ください 住所
当学校区の srec_cat(1) コマンドは常に実行開始アドレス (通常は
ファイルの最後に発生します)、それらが存在する場合は常に。 それらはそれに沿って調整されます
によるデータ記録を使用して、 -オフセット フィルター。 ファイル全体でそれらを保存しようとすることさえあります
ファイル形式が可能な制限まで形式を変更します。
実行開始アドレスレコードがないので追加したい場合、または追加したい場合
既存の実行開始アドレス レコードをオーバーライドするには、 -実行-開始-
住所=数 オプションを選択します。
注意: 実行開始アドレスは、最初のアドレスとは異なる概念です。
データの記憶。 これは、モニターによってジャンプされる「goto」アドレスと考えてください。
六角ロードが完了しました。 メモリ内のデータの開始位置を変更したい場合は、
-オフセット フィルタ。
固定 チェックサム
一部の組み込みファームウェア開発者は、
不正確なチェックサムは、EPROM プログラマのより慎重なモデルでは受け入れられません。
ファイルのチェックサムを修正するには、 -チェックサムを無視する オプション。 例えば:
srec_cat 壊れています。srec -ignore-checksums -o fix.srec
のチェックサム 壊れた.srec 解析されます(解析されない場合はエラーになります)が、
未検査。 結果として 固定.srec ファイルには正しいチェックサムがあります。 の -チェックサムを無視する
オプションは入力にのみ適用されます。
このオプションは、Intel hex を含む、チェックサムを持つ任意のファイル形式で使用できます。
発見する 謎 フォーマット
ジョブの設定方法については、 この試験は フォーマット Is この? 謎の EPROM を検出して変換する方法については、以下のセクションを参照してください。
ファイル形式をロードします。
BINARY ファイル
バイナリファイルとの間の変換が可能です。 バイナリ ファイルと
他のフォーマットを同じにまとめて srec_cat(1)コマンド。
書き込み バイナリ
XNUMX 進ファイルを読み取り、バイナリ ファイルに変換する最も簡単な方法は次のようになります。
srec_cat fred.hex -o fred.bin -バイナリ
これは Motorola hex ファイルを読み取ります フレッド・スレク そしてそれを フレッドビン 生のまま
バイナリ。
データは、バイナリ ファイル内の、
hex ファイル内のアドレス。 データに穴がある場合は、ゼロで埋められます。
もちろん、これはコードが から始まるリンカー出力に共通です。
記憶の中の特定の場所。 たとえば、0x100000 で始まる画像がある場合、
出力バイナリ ファイルの最初の 1MB はゼロになります。
次のようなコマンドを使用して、このオフセットを自動的にキャンセルできます。
srec_cat fred.hex -offset − -minimum-addr fred.hex -o fred.bin
上記のコマンドは、 フレッド・ヘックス ファイルはメモリ内で少なくとも下位にあります
のアドレス フレッド・ヘックス ファイルのデータ。
参照してください srec_binary(5) 詳細については man ページを参照してください。
リーディング バイナリ
バイナリファイルを読み取って変換する最も簡単な方法は次のようになります。
srec_cat fred.bin -binary -o fred.srec
これによりバイナリファイルが読み取られます フレッドビン そして、そのすべてのデータを再びファイルとして書き戻します。
Motorola S-Record ファイル。
多くの場合、このバイナリはアドレス空間内の正確な場所に存在しません。
アドレス XNUMX にあるものとみなされます。 移動する必要がある場合は、 -オフセット フィルタ。
srec_cat fred.bin -binary -offset 0x10000 -o fred.srec
また、ゼロで埋められたファイルの「穴」を避ける必要もあります。 使用できます -作物
フィルター、使用できます -埋めない データがどこにあるか正確にわからない場合は、フィルターします。
srec_cat fred.bin -binary -unfill 0x00 512 -o fred.srec
上記のコマンドは、512 バイト以上の長さのゼロバイトの連続を削除します。 もしあなたの
ファイルには 1GB の先頭ゼロバイトが含まれています。これは遅くなります。使用した方が良いかもしれません。
dd(1) 最初にスライスとダイスを行うコマンド。
接合 ファイル 一緒に
当学校区の srec_cat コマンドの名前は UNIX から取られています cat(1) コマンド。の略です。
「連結する」または「結合する」。 の srec_cat コマンドは EPROM ロード ファイルを結合します。
All In 1
EPROM ロード ファイルを XNUMX つのファイルに結合するのは簡単で、同じ数のファイルに名前を付けるだけです。
必要に応じてコマンドラインを使用します。
srec_cat インファイル1 インファイル2 -o アウトファイル
この例はすべて Motorola S-Record ファイルです。これはデフォルトの形式であるためです。 あなたはできる
XNUMX つのコマンドで複数の形式を使用できる srec_cat(1)は引き続き動作します。 あなたもそうではありません
同じ形式で出力する必要があります:
srec_cat インファイル1 -スペクトラム インファイル2 -ニーダム \
-o アウトファイル -シグネティクス
これらはすべて古い形式ですが、Intel 形式を組み合わせて使用する必要があることも珍しくありません。
および Motorola フォーマットを XNUMX つのプロジェクトで使用できます。
フィルタリング 後 接合
XNUMX つのデータ セットを結合してフィルターを適用したい場合があります。
結合結果に。 これを行うには括弧を使用します。
srec_cat \
'(' \
ファイル内 -除外 0xFFF0 0x10000 \
-generate 0xFFF0 0xFFF8 -repeat-string 'バナナ ' \
')' \
-b-e-length 0xFFF8 4 \
-b-e-チェックサム-ネグ 0xFFFC 4 4 \
-o アウトファイル
上記のコマンド例は、入力ファイルを連結します (生成されたデータ領域は除外されます)。
定数文字列を使用します。 この連結された入力はフィルタリングされて 4 バイトの長さが追加され、
4バイトのチェックサム。
接合 端から端まで
EPROM ロード ファイル内のアドレス範囲が重複することがよくあります。 を取得します。
そうした場合はエラーになります。 両方のファイルがアドレス XNUMX から始まる場合、それぞれが
別の EPROM が必要な場合は、オフセット フィルターを使用する必要がある場合があります。
srec_cat インファイル1 \
インファイル2 -オフセット 0x80000 \
-o アウトファイル
XNUMX つのファイルを正確に相互に追従させたいが、その内容がわからない場合があります。
事前にオフセット:
srec_cat インファイル1 \
インファイル2 -オフセット -最大アドレス インファイル1 \
-o アウトファイル
以前は数値 (0x80000) でしたが、現在は計算 (-maximum-
addr インファイル1)。 これは、数字が使用されるほとんどの場所で可能です (-minimum-addr と
-範囲)。
トリミング 、 DATA
保持するアドレスとコピーするアドレスを選択して、EPROM ロード ファイルをコピーすることができます。
破棄。
この試験は に キープ
一般的なアクティビティは、EPROM の場所に一致するようにデータをトリミングすることです。 リンカーが追加する場合があります
興味のないその他のジャンク品、 例えば RAM の場所にあります。 この例では、
1MB 境界には 2MB EPROM があります。
srec_cat ファイル内 -クロップ 0x200000 0x300000 \
-o アウトファイル
すべてのアドレス範囲の下限は包括的であり、上限は排他的です。 もし、あんたが
それらを減算するとバイト数が得られます。
住所 オフセット
おそらく、あなたは愚かな EPROM プログラマを持っており、EPROM イメージが
ゼロから始まるわけではありません。 どこにあるのかを調べるには ありません メモリ内で開始し、
srec_info(1) コマンド:
$ srec_info たとえば .srec
フォーマット: Motorola S-Record
ヘッダー: extra-whizz ツール チェーン リンカー
実行開始アドレス: 0x00200000
データ: 0x200000 - 0x32AAEF
$
リンカー コマンド ファイルを解体するのではなく、アドレスをオフセットするだけです。
srec_cat ファイル内 -クロップ 0x200000 0x300000 -オフセット −0x200000 \
-o アウトファイル
指定されたオフセットは次のとおりであることに注意してください。 負、その値をから引く効果があります。
入力レコード内のすべてのアドレスを使用して、出力レコードのアドレスを形成します。 この場合、
画像をゼロに戻します。
この例では、入力フィルターがどのように連鎖するのかも示しています。
クロップとオフセットをすべて XNUMX つのコマンドで実行でき、一時ファイルは必要ありません。
データをアドレス XNUMX から開始するようにオフセットしたいだけの場合は、次のようにすることができます。
自動化されるため、事前に最小アドレスを知る必要はありません。 srec_cat's
コマンドラインでいくつかのことを計算する機能:
srec_cat ファイル内 -offset − -minimum-addr ファイル内 \
-o アウトファイル
マイナス記号の両側のスペースに注意してください。これらは必須です。
この試験は に 投げる 離れて
EPROM ロード ファイルから狭いアドレス範囲を除外する必要がある場合があります。
狭いアドレス範囲を維持したいのではなく。 の -除外する フィルターは次の用途に使用できます
この目的。
たとえば、シリアル番号が含まれるアドレス範囲を除外したい場合、
組み込みデバイスが、たとえば 0x20 に 0x100 バイトを保持する場合は、次のようなコマンドを使用します。
srec_cat 入力.srec -除外 0x100 0x120 -o 出力.srec
当学校区の 出力.srec ファイルの必要な場所にデータの穴ができてしまいます。
両方を持つことができることに注意してください -作物 -除外する 同じコマンドライン上で、どちらでも機能するもの
あなたの状況に合わせてより自然に。
不連続 住所 範囲
アドレス範囲は単一の範囲である必要はありません。次を使用してアドレス範囲を構築できます。
単一のペア以上。
srec_cat ファイル内 -クロップ 0x100 0x200 0x1000 0x1200 \
-o アウトファイル
このフィルターの結果、0x100..0x1FF からのデータと 0x1000..0x1200 からのデータが渡されます。
を通過すると、残りは削除されます。 これは、チェーンするよりも効率的です。 -作物 と
-除外する 一緒にフィルターします。
移動 もの AROUND
データ レコードのアドレスを前後方向に変更することもできます。
データレコードをメモリ内のどこに配置するかを再配置することもできます。
オフセット フィルター
当学校区の -オフセット=数 フィルターはレコードのアドレスに作用します。 数値が正の場合
アドレスはメモリ内でそのバイト数だけ上に移動し、負の値は下に移動します。
srec_cat ファイル内 -クロップ 0x200000 0x300000 -オフセット −0x200000 \
-o アウトファイル
上の例では、1x0 にある 200000MB のデータ ブロックをゼロに移動します (オフセットは
負) し、残りのデータを破棄します。
バイト スワッピング
データ内のバイトをスワップして、大きなバイト数とバイト数の間で変換する必要がある場合があります。
通常はエンディアンとリトルエンディアンのデータです。
srec_cat ファイル内 -バイトスワップ 4 -o アウトファイル
これにより、32 ビット値 (4 バイト) のバイトが反転されます。 幅を指定しない場合のデフォルトでは、
16 ビット値 (2 バイト) のバイトを反転します。 実際には、任意の奇妙な値を使用できます
たとえば、2 の累乗である必要さえありません。おそらく 64 ビット (8 バイト) が便利かもしれません。
ある日。
バイナリ 出力
バイナリ ファイルの出力では穴がゼロで埋められるため、注意する必要があります。
100 ビット アドレスのメモリの先頭にある 32kB のプログラムは 4GB のファイルを作成します。 見る
srec_binary(5) この問題をどのように理解し、回避するかについては、通常は -オフセット フィルタ。
分裂 an 画像
16 ビット データ バスがあるが、ファームウェアを保持するために 8 つの XNUMX ビット EPROM を使用している場合は、
を使用して偶数イメージと奇数イメージを生成できます。 -スプリット フィルター。 あなたのことを仮定すると、
ファームウェアは ファームウェア.hex ファイルの場合は、次を使用します。
srec_cat ファームウェア.hex -split 2 0 -o ファームウェア.even.hex
srec_cat ファームウェア.hex -split 2 1 -o ファームウェア.odd.hex
これにより、XNUMX つの必要な EPROM イメージが作成されます。 出力アドレスは次のとおりであることに注意してください。
EPROM イメージが特定のオフセットにある場合 (たとえば、
0x10000、次の例では)、オフセットを削除して置き換える必要があります...
srec_cat ファームウェア.hex \
-offset −0x10000 -split 2 0 \
-オフセット 0x10000 -o ファームウェア.even.hex
srec_cat ファームウェア.hex \
-offset −0x10000 -split 2 1 \
-オフセット 0x10000 -o ファームウェア.奇数.hex
複数のフィルターを適用する機能により、そうでなければ非常に面倒な作業がいかに簡素化されるかに注目してください。
長いスクリプト。
ストライピング
XNUMX番目の使用法 -スプリット フィルターはメモリストライピングです。
バイト幅の部分に分割する必要はなく、他のサイズを選択できます。 共通するのは、
32 ビット幅のデータを 16 組の XNUMX ビット幅のデータに変換したいと考えています。
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バイトのみが含まれます。 結果は、先頭バイトがゼロで埋められた hex ファイルになります。
エンディアン)、すべてのアドレスはチップ内のアドレスの XNUMX 倍になります。 ここにあります
例:
S1130000000102000405060008090A000C0D0E0098
S1130010101112001415160018191A001C1D1E00C8
S1130020202122002425260028292A002C2D2E00F8
S1130030303132003435360038393A003C3D3E0028
00 パディングバイトを削除して、3/4 の重要なバイトだけを残すには、次も使用します。
分割フィルターとその追加 幅 引数は次のようになります。
srec_cat example.srec -split 4 0 3 -o no_dross.srec
これにより、00 パディングバイトが削除されたファイルが作成されます。 次のようになります。
S113000000010204050608090A0C0D0E1011121451
S1130010151618191A1C1D1E2021222425262829EC
S11300202A2C2D2E30313234353638393A3C3D3E87
アドレスのサイズも 3/4 であることに注目してください。 これを逆にするには、
-分割されていない -fill=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 ファイル内 -fill 0x00 -over ファイル内 -o アウトファイル
この例は、アドレス範囲がどこに指定されても、
-以上 -以内に オプションが使用される場合があります。
充填を解除する ブランク
EPROM イメージをチップから読み出した後、EPROM イメージを「埋める」必要があるのが一般的です。 いつもの、
すべての穴が 0xFF で埋められているはずです (プログラムしていない EPROM の領域が表示されます)
読み戻すときは 0xFF となります)。
データ内のすべての 0xFF バイトを削除するには、次のフィルターを使用します。
srec_cat ファイル内 -0xFF を埋めない -o アウトファイル
これで解消されます を 0xFF バイト (実際にそこに入れたいバイトを含む)。
これに対処するには XNUMX つの方法があります。 まず、最小ランレングスを指定できます。
埋めない:
srec_cat ファイル内 -0xFF 5 を埋めない -o アウトファイル
これは、1 ~ 4 バイトの 0xFF の実行は OK であり、ホールのみが作成されるべきであることを示しています。
連続する 5 バイト以上の 0xFF バイトの場合。 XNUMX 番目の方法は、上から再度充填することです。
中間ギャップ:
srec_cat アウトファイル -fill 0xFF -over アウトファイル \
-o 出力ファイル2
どの方法を選択するかは、ニーズと EPROM 内のデータの形式によって異なります。
両方のテクニックを組み合わせる必要がある場合があります。
住所 レンジ パディング
一部のデータ形式は 16 ビット幅で、その場合は自動的に 0xFF バイトで埋められます。
データにない単語の残りの半分を埋めるために必要です。 もしあなたが必要ならば
別の値を入力するには、次のようなコマンドを使用できます。
srec_cat ファイル内 -fill 0x0A \
-以内に ファイル内 -範囲パディング 2 \
-o アウトファイル
これにより、入力ファイルの詳細から計算されたアドレス範囲がフィル フィルターに与えられます。
アドレス範囲は、データがカバーするすべてのアドレス範囲です。 ファイル内、延長されました
(必要に応じて) 各サブ範囲の先頭で 2 バイトの倍数に拡張されます。
(必要に応じて) 各サブ範囲の末尾で 2 バイトの倍数に上向きに変換します。 これも機能します
フラッシュ チップの 1kB ページ境界など、より大きな倍数の場合。 このアドレス範囲のパディング
アドレス範囲が必要な場所ならどこでも機能します。
埋める 著作権
EPROM の未使用部分に著作権メッセージを繰り返すことができます。
EPROM をリバース エンジニアリングしようとすると、次の著作権表示が表示されます。
彼らの XNUMX 進エディター。
これは XNUMX つの入力ソース、つまりデータ ファイルからの入力ソースと、
オンザフライで生成されます。
srec_cat ファイル内 \
-generate '(' 0 0x100000 -minus -within ファイル内 ')' \
-repeat-string 'Copyright (C) 1812 Tchaikovsky. ' \
-o アウトファイル
データ生成のアドレス範囲に注目してください。データ生成には、
EPROM、この場合は 1 から始まる 0MB で、そこから使用されるアドレス範囲が減算されます。
入力ファイル。
これを現在の年でスクリプト化したい場合 (1812 年は少し古いため)、次を使用します。
シェルの出力置換 (バックティック) 機能:
srec_cat ファイル内 \
-generate '(' 0 0x100000 -minus -within ファイル内 ')' \
-repeat‐string "Copyright (C) `date +%Y` チャイコフスキー。" \
-o アウトファイル
指定された文字列は、すべての穴を埋めるまで何度も繰り返されます。
難読化 ノイズ
実際のデータがどこにあるのかを隠すために、EPROM イメージをノイズで埋めたい場合があります。
停止して開始します。 これを行うには、 -ランダムフィル フィルタ。
srec_cat ファイル内 -ランダムフィル 0x200000 0x300000 \
-o アウトファイル
それは次のように機能します -塗りつぶし フィルタですが、定数バイトの代わりに乱数を使用します
の値です。
埋める 自律的AI 16ビット 言葉
画像を定数のバイト値で埋めることが機能せず、定数が必要な場合
代わりに 16 ビットのワード値を使用してください。 -リピートデータ ジェネレーター、任意の時間がかかります
塗りつぶしパターンとして使用するバイトのシーケンス:
srec_cat ファイル内 \
-generator '(' 0x200000 0x300000 -minus -within ファイル内 ')' \
-repeat-data 0x1B 0x08 \
-o アウトファイル
ジェネレーターのアドレス範囲が、再び、次のアドレス範囲を回避していることに注目してください。
ファイル内さんのデータです。 エンディアンを自分で正しく設定する必要があります。
挿入 CONSTANT DATA
場合によっては、定数データ、またはシステムによって生成されないデータを挿入する必要がある場合があります。
コンパイラまたはアセンブラを EPROM ロード イメージにロードします。
バイナリ 手段 リテラル
簡単な方法の XNUMX つは、必要な情報をファイルに保存することです。 ファイルを挿入するには
内容は文字通り、フォーマット解釈なしで、 バイナリ 入力形式:
srec_cat ファイル内 -バイナリ -o アウトファイル
おそらく、 オフセット フィルタを使用してデータを移動する場所に移動します
実際にそれを画像内に含めたい:
srec_cat ファイル内 -バイナリ -オフセット 0x1234 -o アウトファイル
標準入力をデータソースとして使用することも可能で、
脚本化されている。 たとえば、現在の日付と時刻を EPROM ロード ファイルに挿入するには、次のようにします。
パイプを使用できます:
日付 | srec_cat - -bin -offset 0xFFE3 -o アウトファイル
特殊ファイル名「-」は標準入力から読み込むことを意味します。 の出力 date
コマンドの長さは常に 29 文字で、示されているオフセットによりコマンドはコマンドの先頭に配置されます。
64KBのEPROMイメージ。
繰り返す Once
当学校区の 埋める 著作権 上のセクションでは、文字列を何度も繰り返す方法を示しています。 私たち
単一の繰り返しを使用して文字列を XNUMX 回だけ挿入できます。
srec_cat -generate 0xFFE3 0x10000 -repeat-string "`date`" \
-o アウトファイル
データ生成のアドレス範囲が、データの長さと正確に一致していることに注目してください。
date(1) 出力サイズ。 もちろん、入力ファイルを上記に追加することもできます srec_cat(1)
コマンドを使用して、EPROM イメージを日付と時刻とともに連結します。
挿入する A 長い
もう XNUMX つの方法は、EPROM イメージに Subversion コミット番号を追加することです。 この中で
たとえば、アドレス 4x0 に 0008 バイトのリトルエンディアン値を挿入します。 の
Subversion コミット番号は $バージョン この例ではシェル変数:
srec_cat -generate 0x0008 0x000C -l‐e‐constant $version 4 \
ファイル内 -除外 0x0008 0x000C \
-o アウトファイル
フィルターを使用して、バージョン番号が入力される部分に穴があることを確認することに注意してください。
リンカーがそこに何かを置いた場合に備えてです。
DATA ABOUT 、 DATA
データに関するさまざまなデータを出力に追加することができます。
チェックサム
当学校区の -ビッグエンディアン-チェックサム-ネガティブ フィルターを使用してデータを合計してから、
合計の負の値をデータに取り込みます。 これには、次の場合に合計がゼロになる効果があります。
合計幅が挿入された値の幅と一致する場合、チェックサム自体は合計されます。
srec_cat ファイル内 \
-クロップ0 0xFFFFFC \
-ランダムフィル 0 0xFFFFFC \
-b-e-checksum-neg 0xFFFFFC 4 4 \
-o アウトファイル
この例では、メモリの最小メガバイトに EPROM があります。 -cropフィルター
これにより、EPROM 内のデータのみが合計され、他の場所ではデータが合計されなくなります。 の
-random-fill フィルターは、データに残っている穴をランダムな値で埋めます。 最後に、-b-
e-checksum-neg フィルターは、最後にビッグエンディアン形式の 32 ビット (4 バイト) チェックサムを挿入します。
4 バイトの EPROM イメージ。 当然のことながら、このフィルタにはリトル エンディアン バージョンがあります。
よく。
埋め込みコードは、次のような C コードを使用して EPROM をチェックできます。
unsigned long *begin = (unsigned long *)0;
unsigned long *end = (unsigned long *)0x100000;
符号なしロングサム = 0;
while (開始 < 終了)
合計 += *begin++;
if (合計 != 0)
{
おっと!
}
当学校区の -ビッグエンディアンチェックサムビットなし フィルタはチェックサムの合計を除いて同様です。
すべて 1 ビット (-XNUMX) の値が得られるはずです。 たとえば、ロングではなくショートを使用します。
srec_cat ファイル内 \
-クロップ0 0xFFFFFE \
-fill 0xCC 0x00000 0xFFFFFE \
-b-e-checksum-neg 0xFFFFFE 2 2 \
-o アウトファイル
正しいエンディアン フィルタを選択したと仮定すると、埋め込みコードは EPROM をチェックできます。
次のような C コードを使用します。
unsigned short *begin = (unsigned short *)0;
unsigned short *end = (unsigned short *)0x100000;
符号なし短和 = 0;
while (開始 < 終了)
合計 += *begin++;
if (合計 != 0xFFFF)
{
おっと!
}
もあります -b-e-チェックサム-ポジティブ フィルタと、それに対応するリトルエンディアン フィルタ。
単純な合計を挿入します。これは C で等価性テストを使用してチェックされます。
srec_cat ファイル内 \
-クロップ0 0xFFFFFF \
-fill 0x00 0x00000 0xFFFFFF \
-b-e-checksum-neg 0xFFFFFF 1 1 \
-o アウトファイル
正しいエンディアン フィルタを選択したと仮定すると、埋め込みコードは EPROM をチェックできます。
次のような C コードを使用します。
unsigned char *begin = (unsigned char *)0;
unsigned char *end = (unsigned char *)0xFFFFF;
unsigned char の合計 = 0;
while (開始 < 終了)
合計 += *begin++;
if (合計 != *end)
{
おっと!
}
8 ビットの場合、ビッグエンディアンを使用するかリトルエンディアンを使用するかは関係ありません。
フィルタ。
クイック ヘックスダンプ
「XNUMX 進ダンプ」出力形式を使用して、データのチェックサムを確認できます。 これは
計算値の確認やデバッグに役立ちます。 srec_cat(1) コマンドの前
それをスクリプトで不滅のものにします。
srec_cat ファイル内 \
-クロップ 0 0x10000 \
-fill 0xFF 0x0000 0x10000 \
-b-e-チェックサム-ネグ 0x10000 4 \
-クロップ 0x10000 0x10004 \
-o - -hexダンプ
このコマンドはファイルを読み取り、データをチェックサムし、チェックサムを 0x10000 に配置します。
チェックサムのみを含むように結果をトリミングし、チェックサムを
古典的な XNUMX 進ダンプ形式の標準出力。 特殊ファイル名「-」の意味は、
この文脈での「標準出力」。
サイクリック 冗長化 小切手
単純な加算チェックサムには、エラーに関連して多くの理論上の制限があります。
検出できる場合と検出できない場合があります。 CRC 方式では問題が少なくなります。
srec_cat ファイル内 \
-クロップ0 0xFFFFFC \
-fill 0x00 0x00000 0xFFFFFC \
-b‐e‐crc32 0xFFFFFC \
-o アウトファイル
上の例では、メモリの最小メガバイトに EPROM があります。 の -作物 filter
これにより、EPROM 内のデータのみが合計され、他の場所ではデータが合計されなくなります。 の -塗りつぶし
フィルターはデータに残っている穴を埋めます。 最後に、 -b-e-チェックサム-ネガティブ フィルターは
EPROM イメージの最後の 32 バイトにあるビッグエンディアン形式の 4 ビット (4 バイト) チェックサム。
当然のことながら、このフィルターのリトル エンディアン バージョンもあります。
チェックサムは業界標準の 32 ビット CRC を使用して計算されます。 なぜならSRecordは
オープンソースなので、いつでもソースコードを読んでそれがどのように機能するかを確認できます。 非‐
このコードの GPL バージョンはインターネットで入手でき、埋め込みに適しています。
独自のファームウェア。
16 ビット CRC も利用可能です。
srec_cat ファイル内 \
-クロップ0 0xFFFFFE \
-0x00 0x00000 0xFFFFFE \ を埋める
-b‐e‐crc16 0xFFFFFE \
-o アウトファイル
チェックサムは CCITT 式を使用して計算されます。 SRecord はオープンソースであるため、
いつでもソースコードを読んで、それがどのように機能するかを確認できます。 非 GPL バージョンが多数あります
このコードはインターネット上で入手でき、独自のファームウェアに組み込むのに適しています。
「XNUMX 進ダンプ」出力形式を使用して、データの CRC を確認できます。
srec_cat ファイル内 \
-クロップ 0 0x10000 \
-fill 0xFF 0x0000 0x10000 \
-b‐e‐crc16 0x10000 \
-クロップ 0x10000 0x10002 \
-o - -hexダンプ
このコマンドはファイルを読み取り、データの CRC を計算し、CRC を次の場所に配置します。
0x10000、CRC のみが含まれるように結果をトリミングし、チェックサムを
古典的な XNUMX 進ダンプ形式の標準出力。
場所 Is My データ?
EPROM イメージには、
データ。
srec_cat ファイル内 -b-e-最小 0xFFFE 2 -o アウトファイル
上記の例では、データの最小アドレス (低いです 水) をデータに取り込みます。
アドレス 0xFFFE にビッグエンディアン順の XNUMX バイト。 これには最小値自体も含まれます。 もしも
データには指定されたアドレスのバイトがすでに含まれているため、除外フィルターを使用する必要があります。
バイト数のデフォルトは 4 です。
もあります -l-e-最小 リトルエンディアン値を挿入するフィルターと、さらに XNUMX つ
と呼ばれるフィルター -b-e-排他的最小値 -l-e-exclusive-minimum を含まないもの
最小データアドレスの計算における最小値自体。
srec_cat ファイル内 -b-e-最大 0xFFFFFC 4 -o アウトファイル
上記の例では、データの最大アドレス (高いです 水 + 1、 と同じように
アドレス範囲)を、アドレス 0xFFFFFC のビッグエンディアン順の XNUMX バイトとしてデータに組み込みます。
これには最大値自体も含まれます。 データに指定された位置にすでにバイトが含まれている場合
アドレスを使用する必要があります -除外する フィルター。 バイト数のデフォルトは 4 です。
もあります -l-e-最大値 リトルエンディアン値を挿入するフィルターと、さらに XNUMX つ
と呼ばれるフィルター -b-e-exclusive-maximum -l-e-exclusive-maximum を含まないもの
最大データアドレスの計算における最大値自体。
srec_cat ファイル内 -b-e-length 0xFFFFFC 4 -o アウトファイル
上記の例では、データの長さを挿入します (高いです 水 + 1 − 低いです 水)を
データ、アドレス 0xFFFFFC のビッグエンディアン順の XNUMX バイトとして。 これには長さも含まれます
自体。 データの長さの位置にすでにバイトが含まれている場合は、
-除外する フィルター。 バイト数のデフォルトは 4 です。
もあります -l-e-長さ リトルエンディアンの長さを挿入するためのフィルター、および -なれ-
排他的な長さ -l-e-排他的な長さ 長さ自体を含まないフィルター
計算で。
この試験は フォーマット Is この?
EPROM ロード ファイルに関するさまざまな情報を取得するには、 srec_info(1)
指図。 例えば:
$ srec_info たとえば .srec
フォーマット: Motorola S-Record
ヘッダー: "http://srecord.sourceforge.net/"
実行開始アドレス:00000000
データ:0000~0122
0456 - 0FFF
$
この例は、ファイルが Motorola S-Record であることを示しています。 ファイルヘッダーのテキストは、
実行開始アドレスとともに出力されます。 最後のセクションにはアドレスが表示されます
データを含む範囲 (各部分範囲の上限は in包括的ではなく、
exコマンドラインで使用される排他的な形式。
$ srec_info 何か奇妙なファイル.hex -推測
フォーマット: シグネティクス
データ:0000~0122
0456 - 0FFF
$
上記の例では、EPROM ロード ファイル形式を推測しています。 絶対確実というわけではありませんが、通常は
正しく理解します。 使用できます -推測 明示的な形式を指定する場合はどこでも、
速度が遅くなる傾向があるため、お勧めできません。 また、自動ビルドの場合
システムでは、ハード エラーをできるだけ早く発生させたいと考えています。 ファイルが期待どおりに存在しない場合
形式をバーフにしたい場合。
マングリング 、 DATA
データバイトの値はいくつかの方法で変更できます。
srec_cat ファイル内 -および0xF0 -o アウトファイル
上の例では、0xF0 マスクを使用してデータ バイトのビット単位の AND を実行します。 の
レコードのアドレスは変更されません。 実際のところ、このフィルターの用途は思いつきません。
srec_cat ファイル内 -または0x0F -o アウトファイル
上の例では、データ バイトと 0x0F ビットのビット単位の OR を実行します。 の
レコードのアドレスは変更されません。 実際のところ、このフィルターの用途は思いつきません。
srec_cat ファイル内 -xor 0xA5 -o アウトファイル
上の例では、データ バイトと 0xA5 ビットのビット単位の排他的論理和を実行します。
レコードのアドレスは変更されません。 これを使用して、コンテンツを難読化できます。
あなたのEPROM。
srec_cat ファイル内 -oではありません アウトファイル
上の例では、データ バイトのビット単位の NOT を実行します。 レコードのアドレスは、
変更なし。 隠蔽によるセキュリティ?
COPYRIGHT
srec_cat バージョン1.58
Copyright(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 を使用する
