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

本文详细介绍了如何通过TTL方式刷新被写保护的Uboot及其他分区的方法,包括判断Uboot是否被写保护、计算各分区在FLASH中的位置、通过TTL刷写步骤等关键信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址:http://www.openwrt.org.cn/bbs/forum.php?mod=viewthread&tid=11567

第一首先判断UBOOT,或者各分区是否加锁也就是在编译固件中有定义MTD_WRITEABLE的
比如说

  1. static struct mtd_partition tl_wr740n_parts[] = {
  2. {
  3. .name = "u-boot",
  4. .offset = 0,
  5. .size = 0x020000,
  6. .mask_flags = MTD_WRITEABLE,
  7. }, {
  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. .name = "fullflash",
  25. .offset = 0,
  26. .size = 0x400000,
  27. .mask_flags = MTD_WRITEABLE,
  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: [color=Red]00020000[/color] [color=Blue]00010000[/color] "u-boot"
  4. mtd1: [color=Red]000dd8e0[/color] [color=Blue]00010000[/color]"kernel"
  5. mtd2: [color=Red]006f2720[/color] [color=Blue]00010000[/color] "rootfs"
  6. mtd3:[color=Blue] 00130000[/color] [color=Blue]00010000[/color] "rootfs_data"
  7. mtd4: [color=Red]00010000[/color] [color=Blue]00010000[/color] "art"
  8. mtd5: [color=Red]007d0000[/color] [color=Blue]00010000[/color] "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
图像 1.jpg 
2、载入固件到路由内存


在uboot命令行键入 tftpboot 0x80000000 *****.bin
然后等待固件载入路由内存
2.jpg 

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

TTL线刷机前的准备 1. 购买USB转TTL线,价格一般在12到20之间。 2. 在PC上装好TTL线驱动(一定要先装驱动在将TTL线插到电脑上)。 3. 认识TTL线。TTL线一头是USB接口,另外一头一般有4个带杜邦头的插管,分别是GND、RX、TX、VCC,一般GND是黑色,VCC是红色,其他是RX和TX,不清楚的一定要咨询卖家。见下图,你手上的TTL线可能与我提供的图片不同。 4. 下载并安装SecureCRT v6.5.8.380 汉化版, SecureCRT-v6.58H.rar下载地址:http://u.115.com/file/f672fcb574安装好后,我们在PC windows上打开设备管理器,点开端口,我们能看到COM x已经作为TTL通信口。(根据每台电脑的具体情况,COM口会不一样,大多数会是COM2口,我自己的是COM5口,需要自己去设备管理器里查看) 如上图那样选中Prolific USB-to Serial Comm Port (COMx), 鼠标右键弹出菜单, 选择属性,然后如下图那样进行设置 5. 拆开机器。初看上去,设备的后盖一般是看不到螺钉的。但后盖4个角上一般都有4个圆形的海绵垫片,螺钉就藏在下面,请先去除之,然后拧开螺钉,打开后盖,我们就能看到电路板了。下面就请在电路上寻找TTL插针,4 个插针是并排的,一般而言,电路板上只有这样一组并排插针,所以并不难找。请注意并排插针的引脚标注GND,标有GND的插针就是GND。而靠近GND右边一般都是RXD插针,其他依次是TXD、VCC插针。请将TTL线的GND的细长型插管插到GND插针上。TTL线的RXD插到RXD插针上,TXD也如此办理。但VCC插针请不要插,千万小心。 上面我们描述的是一般规律,但也有例外。 RG100A-AA、DCHG-800-A、G120-T、HA910、H108Bv1.2电路板上TTL的GND右边依次是RXD、TXD、但VCC却在 GND左边,其详细接线图请参考chinadsl.net 站长yesdong提供的示意图: 6.将网线一段连入猫的LAN口,任意一个都可以,另一段连接电脑。设置电脑的IP地址为192.168.1.100 ,255.255.255.0 ,192.168.1.1  OK,到此我们的准备工作就做好了 下面我们就开始刷机过程。 刷机步骤 1. 重复检查准备工作。 2. 我们在PC上启动程序SecureCRT 选择菜单“文件”,然后选择快速连接,并按下图进行设置 SecureCRT快速连接 点击连接,我们就能看到如下界面: SecureCRT快速连接2 3. 然后打开电源,这时SecureCRT窗口会有E文滚动,当滚动到*** Press any key to stop auto run (1 seconds) ***,任意按下键盘任意一个键,就会进入CFE> ,这样我们就进入了CFE命令行界面。 4.CFE>e a 回车 再输入y回车(目的是清空flash) 这一步也有可能要输入用户名和密码,telecomadmin/telecomadmin 或者telecomadmin/nE7jA%5m 5.浏览器地址栏输入192.168.1.1,如果提示要用户名和密码则输入telecomadmin/telecomadmin 或者telecomadmin/nE7jA%5m,进入后会看到FW界面(忘记截图了,不过很简单的,都是中文) 6.1,到这一步要分两种情况对待了,如果你能确定你的CFE可以openwrt,直接进入6.2。 我现在只知道RG100A V1.1电信原版的CFE可以openwrt,其他不知。保险的方法是先至电信原版带CFE固件。我之前就在这个地方走了弯路,因为CFE不合适,不上openwrt的。我之前是DLINK固件。 RG100A V1.1电信原版带CFE下载地址(一定不要断电或者接触不良等突发状况,不然就只能JTAG了) 好原版固件后,会自动重启,按上面的方法进入CFE。再次e a,进入下一步。 6.2,e a后在浏览器进入192.168.1.1,这次要选择openwrt固件新了,openwrt固件不含CFE,不死的。这里有下载,LUCI3.12版 最新版本可去openwrt中文网查找。 7.设备完后会再次重启,我们也要再次进入CFE状态。 b        修改board ID、MAC地址、FLASH格式等等信息。 e         就是人们经常说的清nvram操作,输入e 回车后会看到帮助信息。 i         清除配置文件。 r         run命令,启动已经好的系统。 我们先输入b,回车(接上边说的,有些猫完2次FW后已经停在这个界面了)。 第一步是boardID,CFE会返回所有支持的型号,输入型号后边的数字来定义,如果找不到你自己的设备,保持默认就好。 之后会让你修改MAC长度,一般为12,这里务必修改正确。 回车后会让你输入MAC地址,一般会有个默认地址,按照列出的默认地址格式修改就可,当然嫌麻烦也可以不修改。 后边还有几项设置,一般不需要修改,一路回车就好。 我的CFE启动信息及配置: CFE> Boot Address 0xbe000000 Initializing Arena. Initializing Devices. Parallel flash device: name AM29LV320MT|S29GL128-A, id 0x2201, size 16384KB Flash Layout: Boot[0,0xbe000000] Kern[1,0xbe020000]               AuxFS[95,0xbebe0000] Misc[125,0xbefa0000] PSI[127,0xbefe0000] Flash RootFS Partition Length: 12320768 CPU type 0x2A010: 300MHz, Bus: 133MHz, Ref: 64MHz CPU running TP0 Total memory: 33554432 bytes (32MB) Total memory used by CFE: 0x80401000 - 0x80529860 (1214560) Initialized Data:          0x8041E740 - 0x80421060 (10528) Board IP address                  : 192.168.1.1:ffffff00  Host IP address                   : 192.168.1.100  Gateway IP address                :    Run from flash/host (f/h)         : f  Default host run file name        : vmlinux  Default host flash file name      : bcm963xx_fs_kernel  Boot delay (0-9 seconds)          : 1  Board Id (0-8)                    : 96358VW  Number of MAC Addresses (1-32)    : 12  Base MAC Address                  : 见你的路由器背面,格式为XX:XX:XX:XX:XX:XX PSI Size (1-64) KBytes            : 64  Flash Block Size (1-128) in KBytes: 128  Auxillary File System Size Percent: 24  Main Thread Number [0|1]          : 0 再进行一下清除操作 输入“e n”,回车 按提示输入y 回车 清nvram 输入 i   回车 按提示输入y 回车 清除配置文件 完成了上述修改和清除操作后,输入 r 回车 系统就会启动 不必关了电源再开。 到这里新完毕,如果顺利,你已经可以进入http页面了。 END 参考资料: OpenWrt刷机教程 http://www.openwrt.org.cn/hdwiki/index.php?doc-innerlink-OpenWrt刷机教程 [新手教学]TTL线修改CFE参数 和通过CFE固件的流程 http://www.chinadsl.net/thread-28078-1-2.html RG100A-AA、DCHG-800-A、G120-T、HA910、H108Bv1.2等设备的TTL接线图 http://www.chinadsl.net/viewthread.php?tid=30576&highlight=ttl
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值