|
本帖最后由 phitools 于 2018-3-22 10:31 编辑
K3C 备份nand编程器固件的方法
首先你要打开 k3c 的 telnet
不带冗余空间的分布图(通常读出的备份,大家都会的备份方式)
设备名 flash地址范围 大小 标号名 最大长度
- mtd0 0x0000000-0x00FFFFF 1M uboot 0x0100000
- mtd1 0x0100000-0x013FFFF 256K ubootconfigA 0x0040000
- mtd2 0x0140000-0x017FFFF 256K ubootconfigB 0x0040000
- mtd3 0x0180000-0x01BFFFF 256K gphyfirmware 0x0040000
- mtd4 0x01C0000-0x02BFFFF 1M calibration 0x0100000
- mtd5 0x02C0000-0x12BFFFF 16M bootcore 0x1000000
- mtd6 0x12C0000-0x12FFFFF 256K pro_info 0x0040000
- mtd7 0x1300000-0x133FFFF 256K dev_info 0x0040000
- mtd8 0x1340000-0x7f3FFFF 108M system_sw 0x6C00000
- mtd9 0x7f40000-0x7FFFFFF 768K res 0x00C0000
复制代码
mtd10-mtd16只是逻辑影射(影射mtd8的内容, ubi文件系统中的分区), 不在闪存中保留
这可能就是K3C容易变砖的原因,猜测是mtd8的内容变了,而相应的影射关系没变(内容已经移位),
系统又是根据影射进行启动,所以启动不了,变成逻辑砖
带冗余空间(oob或ecc)的闪存分布图(128M芯片 2048一页 64冗余 64页为一块=128K)
- 设备名 flash地址范围 大小 标号名 最大长度
- mtd0_o 0x0000000-0x0107FFF 1M uboot 0x0108000
- mtd1_o 0x0108000-0x0149FFF 256K ubootconfigA 0x0042000
- mtd2_o 0x014A000-0x018BFFF 256K ubootconfigB 0x0042000
- mtd3_o 0x018C000-0x01CDFFF 256K gphyfirmware 0x0042000
- mtd4_o 0x01CE000-0x02D5FFF 1M calibration 0x0108000
- mtd5_o 0x02D6000-0x1355FFF 16M bootcore 0x1080000
- mtd6_o 0x1356000-0x1397FFF 256K pro_info 0x0042000
- mtd7_o 0x1398000-0x13D9FFF 256K dev_info 0x0042000
- mtd8_o 0x13DA000-0x8339FFF 108M system_sw 0x6F60000
- mtd9_o 0x833A000-0x83FFFFF 768K res 0x00C6000
复制代码
128M闪存的实际存储空间为132M
坏块管理机制为 每块内坏块跳过(即每个分区的起始地址是固定的)
K3C 的nanddump 命令可以读出带oob的数据, 但只能按mtd块来读(不能一次全部读出), 所以要读多次
带坏块数据的备份命令, 假设插入U盘的挂载为/ramdisk/usb/.run/mountd/sda1/, 根据实际情况修改
- nanddump -f /ramdisk/usb/.run/mountd/sda1/mtd0_o -o --bb=dumpbad /dev/mtd0
- nanddump -f /ramdisk/usb/.run/mountd/sda1/mtd1_o -o --bb=dumpbad /dev/mtd1
- nanddump -f /ramdisk/usb/.run/mountd/sda1/mtd2_o -o --bb=dumpbad /dev/mtd2
- nanddump -f /ramdisk/usb/.run/mountd/sda1/mtd3_o -o --bb=dumpbad /dev/mtd3
- nanddump -f /ramdisk/usb/.run/mountd/sda1/mtd4_o -o --bb=dumpbad /dev/mtd4
- nanddump -f /ramdisk/usb/.run/mountd/sda1/mtd5_o -o --bb=dumpbad /dev/mtd5
- nanddump -f /ramdisk/usb/.run/mountd/sda1/mtd6_o -o --bb=dumpbad /dev/mtd6
- nanddump -f /ramdisk/usb/.run/mountd/sda1/mtd7_o -o --bb=dumpbad /dev/mtd7
- nanddump -f /ramdisk/usb/.run/mountd/sda1/mtd8_o -o --bb=dumpbad /dev/mtd8
- nanddump -f /ramdisk/usb/.run/mountd/sda1/mtd9_o -o --bb=dumpbad /dev/mtd9
复制代码
备份后可访问\\192.168.2.1将U盘内容拷贝到计算机, 或把u盘插入电脑拷贝到计算机
打开CMD, 换到备份的目录, 用下列命令合成
- copy /b mtd0_o + mtd1_o + mtd2_o + mtd3_o + mtd4_o + mtd5_o + mtd6_o + mtd7_o + mtd8_o + mtd9_o k3crom.bin
复制代码 k3crom.bin 就是编程器固件文件, 文件长度为132M
特别声明: 这时得到的编程器固件, 只适用于你的这个flash芯片, 除非新的芯片与你的老片有相同的坏块数和相同的位置, 才能拷贝!
不然可能不能正常启动! 上nand编程器时要选择 hard copy 模式, UBA size 选0x400, 包括冗余数据. 以希尔特编程器为例, 参数这样设定
如果要想拷贝到其它的芯片中, 需要对固件进行坏块适应性修改, bbt表也要修改, 由于k3c的ECC算法不清楚, 无法修改!
当然了, 如果新芯片是无坏块nand芯片, 还是可以通过备份换算出可拷贝用的无坏块编程器固件的
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
评分
-
查看全部评分
|