zoukankan      html  css  js  c++  java
  • 用Raspberry Pi解救变砖的路由器

    主要内容:在TL-WR841N V5.3路由器变砖的情况下(大约2秒就自动重启),使用TTL线来刷机解救。其中遇到了各种问题,网上解决方案有的地方甚至于是错的,因此有必要总结一下,以便帮助别人。

    为了完成此项工作,你需要以下技能:

    电路板的触电焊接,使用TTL来进行通讯,Linux基本操作

    故障描述:

    路由器接通电源,启动后,所有灯闪了一下,然后是SYS和QSS灯亮,其他灯灭。约2秒过后,所有灯重新闪了一下,然后重复只有两灯亮,其余灭的情况。

    本路由器是看到学校BBS有人转了之后我收的,本来想着登陆web刷一下即可,与那位同学交流后,他说他是将错误的OpenWRT固件刷入路由器之后,因为路由器内存不足所以导致无法启动的。他给了我两种方案:1.去村里让人把RAM改为8M的,2.自己刷回合适的固件。本着懒人懒的跑原则,我打算自己解决,也就是找个适合的固件,然后自己刷。固件因为官网就有,不难找,难点在于如何去刷。

    焊接四个节点

    由于对方已经焊接好了TTL的四个端口,如果你不清楚在哪个位置,请参考 http://wiki.openwrt.org/toh/tp-link/tl-wr841nd 在此务必注意你的路由器版本问题!我的是5.3版本,其4个接口是这样子的:

    来说明一下,Tx是从路由器传输给对方的,Rx是从对方传输给路由器的,两者不可搞混。GND是地线,5V这个在实际操作当中没有用,因为可以靠路由器电源来供电,因此这个节点可以不焊接针。

    焊接好3个触电之后第一步算是完成了。那么怎么让它与电脑通讯呢?我这是晚上才开始做的,总不能因为没有转接USB的头就放弃了吧?幸好有RaspberryPi,这个小板子现在派上大用途了!它可是自带GPIO的啊!所以不用购买转换线,只需要配置RPi可以读写GPIO的RX和TX即可,非常方便!!!

    配置RaspberryPi

    本来RPi默认情况下的GPIO端口是自己输出的,也就是别人可以通过它的GPIO端口来进行对Pi的调试操作。我们现在要反着用,要用Pi来操作路由器。那么首先请找到并确认RPi上面的端口:

    RPi GPIO

    将GPIO14(TXD)与路由器的Rx通过线缆连接起来,将GPIO15(RXD)与路由器的Tx通过线缆连接起来,Ground与路由器的GND连接即可,不需要链接5V那个端口。

    连好之后,我们需要更改配置文件,让RPi不在通过这个口输出自己的信息,而是利用这个口来获取外界信息:

    系统重要文件操作,请谨慎处理

    • 首先编辑 /boot/cmdline.txt 这个文件原来是这样子的:
    dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
    

    看到console 关键字了吧?这个就是说输出给ttyAMA0,因为我们要用这个端口,因此需要删除与之有关的信息,删除之后的样子为:

    dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
    
    • 下一步是编辑/etc/inittab:
    #Spawn a getty on Raspberry Pi serial line
    T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
    

    需要注释掉这一行,也就在前面加一个#

    #T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
    

    当然了,raspbian默认没有安装查看串口的工具,所以我们需要安装

    sudo apt-get install screen

    这样就配置好了RaspberryPi一端了。

    开始通过串口调试

    命令为:

    screen /dev/ttyAMA0 115200,cs8

    如果你没有接通路由器电源,那么你什么都看不见。好吧,现在开动电源!

    于是你会看到上面的信息了,网上说要在Autobooting in 1 seconds这里按下tpl三个按键,但是我按了怎么也不管用啊!!查了之后有人说C278短路,事实不是这样的!原来C278有电容的,我这里是C277缺位。C278管着TTL当中的Tx,所以没了就会看不到任何东西。C277管Rx,所以不短路它就不能输入(我说我之前总是输入不管用!)请看图:C278和C277是并列的,位置和TxRx对应:

    这里提醒大家一点:在焊接之前用万用表量一下是否为通路。如果是通的,那么不用改,否则你需要动手了。

    我就是看到网上的人说了之后盲目改,于是废掉了C278的电容,连接RPi什么反应都没有,才想到的:这个电容管的是Tx,没有它的话就发射不了信号,同理,C277管的才是Rx,这个地方不联通的话那么路由器收不到信号,自然怎么按键就都没反应了。

    于是我只能重新焊接C277和C278两个,由于278的焊锡太大,还碰到了挨着的R249,于是我用了矿泉水瓶的塑料片把两者分开。这个方法好山寨啊。不过,经过这样的处理过后,就可以正常的输入tpl来进入刷机界面了。

    设置TFTP服务器

    解决了不能输入的问题,下面为了刷机就要布置TFTP。因为在其中是有tftpboot命令的,可以将固件直接从网络上面拷贝到本地。于是你需要设置环境变量:

    setenv ipaddr 192.168.1.1
    setenv serverip 192.168.1.2
    print

    也就是设置服务器端和本地的ipv4地址。下面就是设置服务器的tftp服务了。本来想着无线就行了,方案是这样的: 841N的eth0----某路由器lan端,笔记本接某路由器wlan端,Windows下面有现成的TFTP程序,那就这样做吧。结果是可以获取,但是获取前三个块之后似乎就掉线了,而且一掉线就不行。所以考虑转为RPi架设TFTP。

    sudo apt-get install tftpd-hpa
    我最开始遇到了不能安装这个软件包的提示:
    sudo apt-get install tftpd-hpa
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    Suggested packages:
      syslinux-common
    The following NEW packages will be installed:
      tftpd-hpa
    0 upgraded, 1 newly installed, 0 to remove and 4 not upgraded.
    Need to get 46.1 kB of archives.
    After this operation, 142 kB of additional disk space will be used.
    Get:1 http://mirrordirector.raspbian.org/raspbian/ wheezy/main tftpd-hpa armhf 5              .2-4 [46.1 kB]
    Fetched 46.1 kB in 11s (3,936 B/s)
    Preconfiguring packages ...
    (Reading database ... 133633 files and directories currently installed.)
    Unpacking tftpd-hpa (from .../tftpd-hpa_5.2-4_armhf.deb) ...
    dpkg-deb (subprocess): decompressing archive member: lzma error: Cannot allocate               memory
    dpkg-deb: error: subprocess <decompress> returned error exit status 2
    dpkg: error processing /var/cache/apt/archives/tftpd-hpa_5.2-4_armhf.deb (--unpa              ck):
     subprocess dpkg-deb --fsys-tarfile returned error exit status 2
    Errors were encountered while processing:
     /var/cache/apt/archives/tftpd-hpa_5.2-4_armhf.deb
    E: Sub-process /usr/bin/dpkg returned an error code (1)
    可以看出是因为lzma无法申请内存了,那么看一下内存使用:
    $ free
                 total       used       free     shared    buffers     cached
    Mem:        188880     147220      41660          0       4684      42068
    -/+ buffers/cache:     100468      88412
    Swap:            0          0          0
    额,似乎是有点儿少,因为我开了transmission这个内存大户在下片,于是果断关之,内存就降下来了,并且这个包可以正常安装
    特殊情况

    然后配置文件/etc/default/tftpd-hpa

    TFTP_USERNAME=”tftp”
    TFTP_DIRECTORY=”/tmp”
    TFTP_ADDRESS=”0.0.0.0:69″
    TFTP_OPTIONS=”–secure --ipv4”

    并且你需要把下载好的固件(一定要符合版本!!!)放在RaspberryPi的/tmp文件夹下面(最好重命名),最好做到文件的权限为777,同时保证RaspberryPi的这个69端口是开放状态。更改其地址也很简单:

    sudo ifconfig eth0:0 192.168.1.2

    然后重启TFTP服务即可完成TFTP服务器的布置。

    sudo service tftpd-hpa restart

    开刷OpenWRT

    命令有以下部分组成,你在输入每个命令之前确保上一条命令已经被执行完毕:

    ar7240> tftpboot 0x80000000 openwrt.bin
    ar7240> erase 0x9f020000 +0x3c0000 ar7240> cp.b 0x80000000 0x9f020000 0x3c0000 ar7240> bootm 0x9f020000

    第一就是从远端的TFTP服务器下载文件到本机了。针对于5.3版本的TL-W841N来说,固件大小应该为3.75M左右,文件名要在之前的/tmp下面的文件名一致。由于无线传输总是在这一步出错,用RPi传输的话也就2,3秒就完成了。不过要注意它的输出最后一行:

    Bytes transferred = 3932160 (3c0000 hex)

    这里的3c0000就是在第二步和第三步当中所需要的数值了。

    erase和cp虽然比较慢,但好歹等两分钟就能完成的,最后一行启动!至此就已经复活了路由器了!

    下面就是OpenWRT时间了。做了测试,利用它的天线当无线接收器(也就是电脑上面的无线网卡)来使用,可以接受到WiFi信号,理所当然的很稳定。但是这只能做一个用途,虽然是两根天线,但是要么当一个接收器,要么当一个WiFi源,不能像Windows下面那样在连着无线的同时可以创建一个网络。因为我想要的是:无线接入别的网,WAN接入第二个网,LAN口(最好附带无线输出)出来NAT后的结果。路由器那么就得附带一个路由表了。不过有RPi这个神器,当然也可以用它来进行无线的传输活动了~而且在OpenWRT的网站链接上面看到V5版本可以带USB1.1,我也发现了这个J1端口,在WAN附近,应该是预留的一个立式的USB位置,仔细看电路板的话会发现连接D+和D-的是R185和R183,这两个都是断开的,如果想用USB的话需要把他们分别联通,然后重新编译个内核什么的。我测试了一下剩下的俩接口,应该是5V和地线,但两者没有电压差,也就是说没有5V电源,需要外接么?

    参考链接

    http://wiki.openwrt.org/toh/tp-link/tl-wr841nd

    http://elinux.org/RPi_Low-level_peripherals

    http://elinux.org/RPi_Serial_Connection#Connection_to_a_microcontroller_or_other_peripheral

    http://www.ronnutter.com/raspberry-pi-tftp-server/

  • 相关阅读:
    hdu 4027 Can you answer these queries?
    hdu 4041 Eliminate Witches!
    hdu 4036 Rolling Hongshu
    pku 2828 Buy Tickets
    hdu 4016 Magic Bitwise And Operation
    pku2886 Who Gets the Most Candies?(线段树+反素数打表)
    hdu 4039 The Social Network
    hdu 4023 Game
    苹果官方指南:Cocoa框架(2)(非原创)
    cocos2d 中 CCNode and CCAction
  • 原文地址:https://www.cnblogs.com/DaochenShi/p/3174706.html
Copyright © 2011-2022 走看看