我正在努力在 Linux 中刷新嵌入式设备的先前 ROM 转储。我以前的转储包含 oob 数据。我用 写了它nandwrite -n -N -o /dev/mtd0 backup.bin
,然后再次进行 ROM 转储。
通过比较新旧ROM转储,我看到一些无法解释的情况:任何空块(填充为0xFF)的oob(ecc字节)的最后24字节也应该是0xFF,但新ROM中的那些dump 中填充了 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
有人知道为什么吗?
我在代码中添加了一个 hack,nandwrite
如果要写入的内容是 ,则跳过写入 NAND 0xFF
,并且它有效。那么在尝试将空页写入 NAND 时是否存在问题?
添加:
现在我在编写引导加载程序映像时也遇到了这个问题。图片不是页面对齐的,所以nandwrite
用0xFF
. 但是对于只有0xFF
ecc 字节的页面仍然0x00
像上面一样被污染。似乎我的 hack 并没有完全解决我的问题。任何人都可以帮忙吗?也许它可能是内核 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;