[OpenWrt] 使用TLL刷FLASH(固件)的方法
发布时间:2020-12-15 18:22:59 所属栏目:百科 来源:网络整理
导读:原文地址:http://www.openwrt.org.cn/bbs/forum.php?mod=viewthreadtid=11567 第一首先判断UBOOT,或者各分区是否加锁也就是在编译固件中有定义MTD_WRITEABLE的 比如说 static struct mtd_partition tl_wr740n_parts[] = { { .name = "u-boot", .offset = 0
原文地址:http://www.openwrt.org.cn/bbs/forum.php?mod=viewthread&tid=11567 第一首先判断UBOOT,或者各分区是否加锁也就是在编译固件中有定义MTD_WRITEABLE的 判断方法很简单 使用wget或者是TFTP下下载UBOOT.bin到/tmp下 然后执行 mtd -r write xxxx.bin u-boot 如果提示 写入保护的话那你的Uboot就已经写保护了必须通过TTL的方式来写入 如果提示成功,那就重启路由以后就可以了,大多数固件在编译的时候Uboot都是写保护的 下面来说说TTL的方式写入Uboot或者其他分区 首先你可以看看你的分区情况 登陆终端(SSH或者TELNET) 执行 cat /proc/mtd 可以看到以上分区列表 红色部分是分区大小,其实我们要知道的很简单一个带有Uboot的编程器固件的组成其实就是Uboot+firmware+Art=编程器固件 Uboot的大小大家都知道是128k也就是0x20000 art的大小是0x10000 如此也就得出了? 编程器固件 - Uboot - art =firmware的大小,用winhex可以从编程器固件中提取出firmware然后再WEB里升级或者刷机( 有点废话很多人都知道) 说了很多理论上的东西主要还是让大家灵活应用,不要照抄网上的方法,导致我今天的错误。 ttl刷FLASH的时候首先要记住一些地址,也就是FLASH的起始地址 普通的uboot一个是 0x9f000000开始 ubnt是 0xbf000000 开始 有了这个就可以计算出各分区在FLASH中的位置 比如说Uboot 在普通的Uboot命令中的位置就是0x9f000000 - 0x9f020000这一段 art在普通uboot中的位置就是 0x9f000000 + 0x20000 + firmware的大小 然后一直到 0x9f000000 + 0x20000 + firmware +0x10000(不知道这么说大家会明白没有) 下面就实例说明下 1、进入ttl查看信息 比如在 WR740的TTL下刷新Uboot 上电直接在键盘输入TPL终止uboot启动 在uboot下键入printenv 可以看到 serverip 192.168.1.100 ?(可能其他的Uboot不一样) 现在把你需要刷的分区固件放到TFTP的同目录下面然后开启开启TFTP32 2、载入固件到路由内存 在uboot命令行键入 tftpboot 0x80000000 *****.bin 然后等待固件载入路由内存 然后使用erase清除需要刷新的分区 注意上图中的红色框中的大小 我们的uboot的大小是0x20000所以如果是刷新uboot的时候红色框框中的大小应该是20000所以命令应该是 erase FLASH起始地址 +需要刷新的固件大小,由此得出命令应该如下 erase 0x9f000000 +0x20000 注意这个加号一定要的具体命令参数可以看 http://www.doc88.com/p-98941639479.html 4、写入要刷新的分区 然后写入Uboot 也就是内存复制 命令方式 cp.b 源地址 目的地址 大小 所以这里应该输入 pb.b 0x80000000? 0x9f000000 0x20000 当然原地地址也是可以计算的,比如TFTPBOOT载入估计爱你到的时候你的固件不是Uboot,而是一个完整的编程器固件的话 源地址计算方法也和分区计算的起始地址是一样的 5启动路由 命令方式? bootm FLASH地址(这里具体还没弄明白是刷新的地址还是firmware的地址)一般我用下面这个命令就OK了 bootm? 0x9f020000? 如果启动正常表示你已经刷新完成了, 如果刷新 firmware,或者ART命令方式一样不通的是计算出来的地址和大小而已。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |