清除中兴F7607P/F4607P的NAND闪存坏块标记
最近,我尝试将移动版的F7607P内核分区替换为电信版。然而,由于我的粗心大意,我不小心覆盖了正在使用中的kernel2分区,导致该分区被标记了大量坏块,无法正常使用。起初,我以为这个分区已经彻底损坏,因此不敢再继续尝试修复。直到今天,我在GitHub上发现一个有用的信息:https://github.com/u-boot/u-boot/blob/master/doc/README.nand
这篇文档介绍了一个名为"scrub"的命令,它类似于"erase",但不会跳过坏块,而是会擦除它们。然而,需要注意的是,在使用该命令之前,我们必须明确了解其中的风险。由于"scrub"命令会清洗所有坏块标记,包括出厂时已经存在的真正坏块标记,因此如果分区中存在真正的坏块,清洗掉标记后可能会产生意想不到的问题。因此,这条命令只能用来清除用户错误标记的坏块标记,千万不要随意使用。
根据我的记忆,我之前在这块美光SLC闪存的mtd8分区写入时,并没有收到坏块的提示。
于是,我重新打开设备,连接上TTL适配器,进入uboot,使用中兴的uboot内置的NAND命令,我发现它也提供了scrub功能。
首先,我使用"nand bad"命令查看闪存上标记的所有坏块。经过观察,我发现大量连续的坏块都在mtd8分区内,其他地方都没有,这表明这块SLC闪存的出厂品质还不错。
接下来,我根据"nand scrub"命令的用法,使用命令"nand scrub 0x3e00000 0x2800000"来清洗mtd8分区内的坏块标记。在确认执行之前,系统给出了一个警告,指出这个操作将会擦除所有出厂时设置的坏块。我确认了自己的操作目的,并进行了进一步的测试,确保自己知道自己正在做什么。
在确认后,系统开始执行擦洗操作。我耐心等待,最终操作成功完成。接着,我再次使用"nand bad"命令来查看坏块标记,结果发现一个坏块标记都没有了!
接下来,我将正常使用的mtd7分区复制到已经清洗坏块标记的mtd8分区,使用命令"nand read 0x88000000 0x1600000 0x2800000"将mtd7分区读取到内存中,然后使用命令"nand write 0x88000000 0x3e00000 0x2800000"将内存中的数据写入mtd8分区。在执行这些命令的过程中,我没有遇到任何错误提示,非常顺利。
最后,我重新启动设备,进入修复后的mtd8系统,并使用"upgradetest switchver 1"命令将下次启动的分区设置为修复后的mtd8。重新启动后,通过TTL连接,我看到mtd8分区成功通过CRC校验和RSA验证,内核加载成功,系统顺利启动。我成功地挽回了这次失误,避免了设备损坏。
通过这次救援操作,我深刻认识到了对闪存进行操作时的谨慎和小心。同时,我也体会到了uboot内置的强大功能,尤其是"scrub"命令的实用性和帮助。
总结起来,如果你在类似的情况下误标记了闪存的坏块,可以尝试使用类似的救援方法,但请务必谨慎操作,并确保了解所有操作的风险和后果。
点击链接加入群聊三群:751529538
点击链接加入群聊二群:376877156
点击链接加入群聊【路由器交流群:622891808已满】
本站附件分享,如果附件失效,可以去找找看
饿了么红包