找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 11884|回复: 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命令方式一样不通的是计算出来的地址和大小而已。

本帖子中包含更多资源

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

×

评分

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

查看全部评分

 楼主| | 显示全部楼层
看来大家都知道
回复

使用道具 举报

红色的部分没看到
回复

使用道具 举报

好文章,很有帮助,谢谢!
回复

使用道具 举报

来自手机 | 显示全部楼层
支持,思考了
回复

使用道具 举报

思考了。
回复

使用道具 举报

LZ用啥编辑器和浏览器?排版问题?
回复

使用道具 举报

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

代码和颜色不能同时使用
回复

使用道具 举报

来自手机 | 显示全部楼层
我的8mflash,肿么uboot的起始地址是0x000000,结束于
0x001FFFF,art起始于0x7F0000,结束于0x7FFFFF。跟你的差别蛮大啊?
回复

使用道具 举报

来自手机 | 显示全部楼层
我的8mflash,肿么uboot的起始地址是0x000000,结束于
0x001FFFF,art起始于0x7F0000,结束于0x7FFFFF。跟你的差别蛮大啊?
回复

使用道具 举报

思考贴,谢谢楼主
回复

使用道具 举报

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

UBOOT的起始地址不可能是0x000000000
回复

使用道具 举报

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

普通的uboot一个是 0x9f000000开始
回复

使用道具 举报

很好的教程,不错
回复

使用道具 举报

红色部分在哪儿?
回复

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2024-5-17 22:02

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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

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