ubootがlinuxカーネルを起動するとVerifying Checksumが出力されます...Bad Data CRC解決方法

2023 ワード

まず筆者がubootでlinuxを起動したときのエラー出力を貼り付けます
NAND read: device 0 offset 0xa0000, size 0x400000
size adjusted to 0x200000 (16 bad blocks)
 2097152 bytes read: OK
## Booting kernel from Legacy Image at 30000000 ...
   Image Name:   Linux-3.17.2
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    2624776 Bytes = 2.5 MiB
   Load Address: 30008000
   Entry Point:  30008000
   Verifying Checksum ... Bad Data CRC
ERROR: can't get kernel image!

カーネルでVerifying Checksumを検索し、
image.cには次のような一節があります.
if (verify) {
		puts("   Verifying Checksum ... ");
		if (!image_check_dcrc(rd_hdr)) {
			puts("Bad Data CRC
"); bootstage_error(BOOTSTAGE_ID_RD_CHECKSUM); return NULL; } puts("OK
"); }

ここのimage_check_dcrcの関数は,カーネルイメージのヘッダ64バイトの検証情報を実際に得られたカーネルのパラメータと比較し,カーネルを焼いたデータに誤りがあったことが明らかになった.
筆者のカーネルは大丈夫ですが、問題はnand flashを焼くことです.
出力された情報を振り返ると、
NAND read: device 0 offset 0xa0000, size 0x400000
size adjusted to 0x200000 (16 bad blocks)
 2097152 bytes read: OK
私がカーネル(実寸は2.7 M)分を与えたスペースは0 xa 0000からの4 Mスペースでしたが、2097125 bytesを読んだだけで、2 Mでしたが、ここはおかしい!!
では、問題はどこにあるのでしょうか.size adjusted to 0 x 20000(16 bad blocks)---->適切な大きさは2 M(16個の不良ブロック)ubootにnand infoコマンドを入力すると、Erase size 131072 bが見えます.消去ブロックが128 kであることを意味しています.では、16個の不良ブロックが2 Mを占めています!!!ubootパラメータを修正し、kernelパーティションを12 Mに拡大し、焼き直し、起動すれば大丈夫です