Linux で組み込みデバイスの以前の ROM ダンプをフラッシュするのに苦労しています。以前のダンプに oob データが含まれています。で書き込んでnandwrite -n -N -o /dev/mtd0 backup.bin
、再度ROMダンプをとります。
古い ROM ダンプと新しい ROM ダンプを比較すると、説明のつかない状況が見られます。空のブロック (0xFF で埋められている) の oob の最後の 24 バイト (ecc バイト) も 0xFF である必要がありますが、新しい ROM のものはダンプは 0x00 で埋められ、後で書き込みエラーが発生します。
oob は次のようになります。
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
しかし、次の場合nandwrite
:
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF 00000000 00000000
00000000 00000000 00000000 00000000
誰でも理由がわかりますか?
コードにハックを追加して、nandwrite
書き込む内容が の場合に NAND への書き込みをスキップすると、うまくいきました0xFF
。では、空のページを NAND に書き込もうとすると問題が発生するのでしょうか?
追加した:
現在、ブートローダー イメージの書き込み時にもこの問題が発生しています。画像はページ位置合わせされていないため、nandwrite
でパディングされてい0xFF
ます。ただし0xFF
、ecc バイトのみを含むページの場合は、0x00
上記のようにまだ汚染されています。私のハックは私の問題を完全には解決していないようです。誰でも助けることができますか?おそらく、カーネル 2.6.35 のバグでしょうか?
これは私のハックです:
int i;
int needwrite=0;
for (i = 0 ; i < len ; ++i){
if(((uint8_t*)data)[i]!=0xff){
needwrite=1;
break;
}
}
if(!needwrite)
return 0;