从 http://projects.doozan.com/uboot/build_uboot.htm 上看到的。U-boot 和 U-boot env 所在的 block 往往没有 ECC (反正 NAND 的前几个 boot block 是保证无坏块的,任何 FTL 控制器的固件都得写在这儿,有 ECC 也是白搭),直接读取会表现得和坏块一样。
所以,正确的姿势是(或者可以试一下):
nanddump -nof u-boot.img /dev/mtdX
当然 X 一般是 0 了。-n 关掉 ECC 校验,-o 关掉 OOB ( Out-of-band ,即 NAND 每块比整数大小多出来的空间),-f 输出到文件。
附带不用编程器备份编程器固件大法:
ssh user@target dd if=/dev/mtdblockX conv=sync,noerror > mtdX.img
X 从 0 到最后一个 part ,完事后 cat 起来即可。当然如前所述 bootloader 有可能需要单独处理。-conv sync,noerror 适用于 NAND ,可以跳过坏块并填 0 。当然,此选项有的 busybox 自带的 dd 不支持,于是得先 scp 上去一个。scp 不支持直接读取块设备或者容错,cp 到 tmpfs 内存又可能不够,遂出此策。
话说回来,由于 NAND 存在位置不确定的坏块,所以单独备份 U-boot 的意义比较大。
如果要窥探 NAND 镜像的内容,你可能需要 nandsem 内核模块:
modprobe nandsim cache_file=some_image_dupe.img # 养成备份好习惯
然后你的电脑上就会多出来一个新的 mtd 设备,这样像 ubifs 之类的东西就可以拿出来用了。
PS. 来美一年采坑颇多,等有心情了自会慢慢吐槽。
博主在哪个学校啊
UW-Madison
Добрый день.
Порекомендуйте нормальную типографию для печати визиток
Я нашел одну, качество, цены и скорость у них хорошее,
но они размещаются в Красноярске, а мне хотелось бы в Новосибирске.
https://kraft-pt.ru