インテルのみ表示可能 — GUID: ass1606327214197
Ixiasoft
インテルのみ表示可能 — GUID: ass1606327214197
Ixiasoft
7.4.5.3. 破損したコンフィグレーション・ポインター・ブロック
- ボードの電源を入れ、U-Bootプロンプトで停止します。
- rsu list コマンドを実行して、すべてのパーティションを含む詳細なステータスを表示し、SPTの位置を特定します。
SOCFPGA # rsu list RSU: Remote System Update Status Current Image : 0x01000000 Last Fail Image : 0x00000000 State : 0x00000000 Version : 0x00000202 Error location : 0x00000000 Error details : 0x00000000 Retry counter : 0x00000000 RSU: Sub-partition table 0 offset 0x00910000 RSU: Sub-partition table 1 offset 0x00918000 SF: Detected mt25qu02g with page size 256 Bytes, erase size 4 KiB, total 256 MiB RSU: Sub-partition table content BOOT_INFO Offset: 0x0000000000000000 Length: 0x00110000 Flag : 0x00000003 FACTORY_IMAGE Offset: 0x0000000000110000 Length: 0x00800000 Flag : 0x00000003 P1 Offset: 0x0000000001000000 Length: 0x01000000 Flag : 0x00000000 SPT0 Offset: 0x0000000000910000 Length: 0x00008000 Flag : 0x00000001 SPT1 Offset: 0x0000000000918000 Length: 0x00008000 Flag : 0x00000001 CPB0 Offset: 0x0000000000920000 Length: 0x00008000 Flag : 0x00000001 CPB1 Offset: 0x0000000000928000 Length: 0x00008000 Flag : 0x00000001 P2 Offset: 0x0000000002000000 Length: 0x01000000 Flag : 0x00000000 P3 Offset: 0x0000000003000000 Length: 0x01000000 Flag : 0x00000000 RSU: CMF pointer block offset 0x00920000 RSU: CMF pointer block's image pointer list Priority 1 Offset: 0x0000000001000000 nslot: 0
- 対応するフラッシュ領域を消去して、CPB0を破損します。
SOCFPGA # sf probe SF: Detected mt25qu02g with page size 256 Bytes, erase size 4 KiB, total 256 MiB SOCFPGA # sf erase 0x0920000 0x1000 SF: 4096 bytes @ 0x920000 Erased: OK
- ボードの電源を入れ直し、U-Bootプロンプトを停止して、RSUステータスを照会します。
SOCFPGA # rsu status_log FW detects corrupted CPB0 but CPB1 is fine Restoring CPB0 Current Image : 0x01000000 Last Fail Image : 0x00100000 State : 0xf004d010 Version : 0x0dcf0202 Error location : 0x00000000 Error details : 0x00000000 Retry counter : 0x00000000
State フィールドには、特別なエラーコード 0xf004d010 があります。これは、CPB0が破損していることを示します。Last Fail Image には、この場合に使用される特別な値 0x00100000 があります。Version フィールドは、エラーが決定ファームウェア (0xDCF) によって報告されたことを示します。U-Boot RSUコマンドが最初に実行されたときに呼び出される rsu_init 関数は、CPBの破損を検出し、CPB1からCPB0を回復させます。
- CPBの内容をファイルに保存し、後のリカバリーに使用できるようにします。
SOCFPGA # rsu save_cpb ${loadaddr} 4100 bytes CPB data saved SOCFPGA # fatwrite mmc 0:1 ${loadaddr} cpb-backup.bin ${filesize} 4100 bytes written
- その位置でフラッシュを消去して、両方のCPBを破損します。
SOCFPGA # sf probe SF: Detected mt25qu02g with page size 256 Bytes, erase size 4 KiB, total 256 MiB SOCFPGA # sf erase 0x0920000 0x1000 SF: 4096 bytes @ 0x920000 Erased: OK SOCFPGA # sf erase 0x0928000 0x1000 SF: 4096 bytes @ 0x928000 Erased: OK
- ボードの電源を入れ直し、U-Bootプロンプトで起動し、RSUステータスを照会します。
SOCFPGA # rsu status_log FW detects both CPBs corrupted Current Image : 0x00110000 Last Fail Image : 0x00100000 State : 0xf004d011 Version : 0x0dcf0202 Error location : 0x00000000 Error details : 0x00000000 Retry counter : 0x00000000
予想どおり、Current Image はファクトリー・イメージとして報告されます。State フィールドには、特別なエラーコード 0xf004d011 があります。これは、両方のCPBが破損していることを示します。Last Fail Image には、この場合に使用される特別な値 0x00100000 があります。Version フィールドは、エラーが決定ファームウェア (0xDCF) によって報告されたことを示します。U-Boot RSUコマンドが最初に実行されたときに呼び出される rsu_init 関数が検出され、両方のCPBが破損していることが報告されます。
- 有効なCPBを必要とするコマンドの実行を試すと、拒否されます。
SOCFPGA # rsu slot_get_info 0 corrupted CPB --run rsu create_empty_cpb or rsu restore_cpb <address> first
- 作成したバックアップ・ファイルから保存したCPBを復元します。
OCFPGA # fatload mmc 0:1 ${loadaddr} cpb-backup.bin 4100 bytes read in 3 ms (1.3 MiB/s) SOCFPGA # rsu restore_cpb ${loadaddr}
- CPBが復元されたため、ファームウェアによって報告されたエラーをクリアします。
または、電源を入れ直すか、nCONFIGをアサートして、ファームウェアによって報告されたエラーをクリアすることもできます。SOCFPGA # rsu clear_error_status
- 有効なCPBを必要とするコマンドの実行を再試行すると、成功します。
SOCFPGA # rsu slot_get_info 1 NAME: P2 OFFSET: 0x0000000002000000 SIZE: 0x01000000 PRIORITY: 1