ubootがlinuxカーネルを起動するとVerifying Checksumが出力されます...Bad Data CRC解決方法
2023 ワード
まず筆者がubootでlinuxを起動したときのエラー出力を貼り付けます
カーネルでVerifying Checksumを検索し、
image.cには次のような一節があります.
ここのimage_check_dcrcの関数は,カーネルイメージのヘッダ64バイトの検証情報を実際に得られたカーネルのパラメータと比較し,カーネルを焼いたデータに誤りがあったことが明らかになった.
筆者のカーネルは大丈夫ですが、問題はnand flashを焼くことです.
出力された情報を振り返ると、
では、問題はどこにあるのでしょうか.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に拡大し、焼き直し、起動すれば大丈夫です
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に拡大し、焼き直し、起動すれば大丈夫です