チェックサム計算の概要
チェックサムを使用して、イメージが実行時に最初にチェックサムが生成されたときと同じかどうかを検証できます。つまり、そのイメージが破損していないかを確認します。
これは次のように機能します。
最初のチェックサムが必要です。
IAR ELFツール(
ielftool)を使用して初期のチェックサムを生成するか、サードパーティ製のチェックサムを使用できます。実行時に2つ目のチェックサムを生成する必要があります。
実行時にチェックサムを計算するためのアプリケーションのソースコードに特定のコードを追加するか、または実行時にチェックサムを計算するデバイスとして専用のハードウェアを使用することも可能です。
2つのチェックサムを比較して異なる場合に、適切な処理を行うためのアプリケーションソースコードに、特定のコードを追加する必要があります。
2つのチェックサムが同じ方法で計算され、イメージにエラーがない場合、チェックサムは同じになるはずです。同じでなければ、2つのチェックサムが同じ方法で生成されなかったと考えるべきです。
2つのチェックサムを生成するときに使用したソリューションが何であれ、両方のチェックサムがまったく同じ方法で計算されているか確認する必要があります。初期のチェックサムにielftoolを、実行時にはソフトウェアベースの計算にをそれぞれ使用する場合、両方のチェックサムの生成に対して完全なコントロールの権限を持つことになります。ただし、サードパーティ製のチェックサムを初期のチェックサムに使用し、実行時のチェックサム計算に何らかのハードウェアサポートを使用する場合、検討すべき追加の要件が加わることがあります。
2つのチェックサムについては、常に検討すべき選択肢のほか、追加の要件がある場合にみ選択する項目があります。なお、どちらのチェックサムに対しても、すべての詳細が同じでなければなりません。
常に検討すべき事項:
チェックサムの範囲
チェックサムを用いて検証するメモリ範囲(複数可)。一般的には、すべてのROMメモリについてチェックサムを計算することをお勧めします。しかし、特定範囲についてのみ、チェックサムを計算することをお勧めします。以下の点に注意してください。
1つのチェックサムに対して複数の範囲が存在することは問題ありません。
チェックサムは、すべてのメモリ範囲で最下位から最上位アドレスへ計算する必要があります。
各メモリ範囲は定義された順序通りに検証する必要があります(たとえば、
0x100–0x1FF,0x400–0x4FFは0x400–0x4FF,0x100–0x1FFと同じではありません)。複数のチェックサムが使用される場合、セクションごとに一意のシンボル名を使用する必要があります。
チェックサムは、チェックサムやソフトウェアブレークポイントを含むメモリ範囲については計算しないでください。
チェックサムのアルゴリズムおよびサイズ
どのアルゴリズムが最適か考える必要があります。Sum(単純な算術合計)またはCRC(最もよく使用されるアルゴリズム)という2つの基本的な選択肢があります。CRCの場合、チェックサムに使用するサイズは、2バイト、4バイト、8バイトです。定義済の多項式がサイズに応じた十分な幅があると、エラー検出の効果がより高くなります。定義済の多項式はほとんどの場合において機能しますが、データセットによっては機能しない場合もあります。その場合は、独自の多項式を指定することができます。エラー検出メカニズムが必要な場合は、チェックサムのサイズに定義済のCRCアルゴリズムを使用してください。通常はCRC16またはCRC32です。
注:
nビットの多項式の場合、n番目のビットは常に"1"に設定済みとみなされます。16ビットの多項式(CRC16など)の場合、0x11021は0x1021と同じことになります。不均一な分布のデータセットの適切な多項式を選択する詳細については、例えばTannenbaum, A.S., Computer Networks, Prentice Hall 1981, ISBN: 0131646990の3.5.3章を参照ください。
Fill
チェックサムの計算の前に、チェックサムの範囲のすべてのバイトについて、十分に定義された値が必要です。不明な値を持つバイトは通常、アライメントのために追加されたパッドバイトです。つまり、計算時にどのフィルパターンを使用するか指定しなければなりません。一般的には
0xFFまたは0x00です。初期値
チェックサムには常に明示的な初期値が必要です。
これらの必須の詳細に加えて、他の検討事項があることもあります。通常は、サードパーティ製のチェックサムを使用し、それをRocksoft チェックサムモデルに適合させる場合や、実行時にチェックサムを生成するためのハードウェアサポートを使用するときなどがそうです。ielftoolにはアライメントや補数、ビット順、ワード内のバイトオーダ、チェックサムのユニットサイズを制御するためのサポートも用意されています。