找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 11845|回复: 25

使用TLL刷FLASH(固件)的方法

[复制链接]
本帖最后由 djcash 于 2012-10-1 13:37 编辑

今天上论坛看到一位朋友给了我一份wr740 的UBOOT就想着找法子来刷到路由里,结果悲剧了,现在正在使用编程器恢复中,利用这时间给大家写个过程让大家以后不再犯和我一样的错误

第一首先判断UBOOT,或者各分区是否加锁也就是在编译固件中有定义MTD_WRITEABLE的
比如说
  1. static struct mtd_partition tl_wr740n_parts[] = {
  2. {
  3. <FONT color=red>.name = "u-boot",
  4. .offset = 0,
  5. .size = 0x020000,
  6. .mask_flags = MTD_WRITEABLE,
  7. </FONT>}, {
  8. .name = "kernel",
  9. .offset = 0x020000,
  10. .size = 0x100000,
  11. }, {
  12. .name = "rootfs",
  13. .offset = 0x120000,
  14. .size = 0x2d0000,
  15. }, {
  16. .name = "art",
  17. .offset = 0x3f0000,
  18. .size = 0x010000,
  19. }, {
  20. .name = "firmware",
  21. .offset = 0x020000,
  22. .size = 0x3d0000,
  23. }, {
  24. .<FONT color=red>name = "fullflash",
  25. .offset = 0,
  26. .size = 0x400000,
  27. .mask_flags = MTD_WRITEABLE,</FONT>
  28. }
复制代码
红色的部分就是分区进行了写保护,如果编译固件的时候做了这样的写保护就不能在Openwrt的命令行下进行刷写(也就是SSH或者TELNET)
判断方法很简单
使用wget或者是TFTP下下载UBOOT.bin到/tmp下
然后执行
mtd -r write xxxx.bin u-boot
如果提示
写入保护的话那你的Uboot就已经写保护了必须通过TTL的方式来写入

如果提示成功,那就重启路由以后就可以了,大多数固件在编译的时候Uboot都是写保护的

下面来说说TTL的方式写入Uboot或者其他分区

首先你可以看看你的分区情况
登陆终端(SSH或者TELNET)
执行
cat /proc/mtd
  1. root@WM150R:~# cat /proc/mtd
  2. dev: size erasesize name
  3. mtd0: <FONT color=red>00020000 </FONT><FONT color=blue>00010000</FONT> "u-boot"
  4. mtd1: <FONT color=red>000dd8e0 </FONT><FONT color=blue>00010000</FONT> "kernel"
  5. mtd2: <FONT color=red>006f2720 </FONT><FONT color=blue>00010000</FONT> "rootfs"
  6. mtd3: <FONT color=red>00130000 </FONT><FONT color=blue>00010000</FONT> "rootfs_data"
  7. mtd4: <FONT color=red>00010000 </FONT><FONT color=blue>00010000</FONT> "art"
  8. mtd5: <FONT color=red>007d0000 </FONT><FONT color=blue>00010000</FONT> "firmware"
复制代码
可以看到以上分区列表
红色部分是分区大小,其实我们要知道的很简单一个带有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
然后等待固件载入路由内存


3、清楚要刷新的分区

然后使用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命令方式一样不通的是计算出来的地址和大小而已。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

点评

还是不太明白,求深入交流。  发表于 2012-10-25 16:52

评分

参与人数 3恩山币 +3 收起 理由
qq*** + 1 丁锦昊到此一游!
yxwang*** + 1 泥马,真给力,我要顶!
CZ*** + 1 很有教育意义!

查看全部评分

我的恩山、我的无线 The best wifi forum is right here.
 楼主| | 显示全部楼层
看来大家都知道
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

红色的部分没看到
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

好文章,很有帮助,谢谢!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

来自手机 | 显示全部楼层
支持,学习了
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

学习了。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

LZ用啥编辑器和浏览器?排版问题?
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| | 显示全部楼层
0522 发表于 2012-10-7 09:32
LZ用啥编辑器和浏览器?排版问题?

代码和颜色不能同时使用
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

来自手机 | 显示全部楼层
我的8mflash,肿么uboot的起始地址是0x000000,结束于
0x001FFFF,art起始于0x7F0000,结束于0x7FFFFF。跟你的差别蛮大啊?
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

来自手机 | 显示全部楼层
我的8mflash,肿么uboot的起始地址是0x000000,结束于
0x001FFFF,art起始于0x7F0000,结束于0x7FFFFF。跟你的差别蛮大啊?
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

学习贴,谢谢楼主
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| | 显示全部楼层
gxmshcf 发表于 2012-10-14 01:06
我的8mflash,肿么uboot的起始地址是0x000000,结束于
0x001FFFF,art起始于0x7F0000,结束于0x7FFFFF。跟 ...

UBOOT的起始地址不可能是0x000000000
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| | 显示全部楼层
gxmshcf 发表于 2012-10-14 01:06
我的8mflash,肿么uboot的起始地址是0x000000,结束于
0x001FFFF,art起始于0x7F0000,结束于0x7FFFFF。跟 ...

普通的uboot一个是 0x9f000000开始
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

很好的教程,不错
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

红色部分在哪儿?
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /1 下一条

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-4-28 15:01

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表