用Raspberry Pi解救變磚的路由器

主要內容:在TL-WR841N V5.3路由器變磚的狀況下(大約2秒就自動重啓),使用TTL線來刷機解救。其中遇到了各類問題,網上解決方案有的地方甚至因而錯的,所以有必要總結一下,以便幫助別人。linux

爲了完成此項工做,你須要如下技能:web

電路板的觸電焊接,使用TTL來進行通信,Linux基本操做服務器

故障描述:網絡

路由器接通電源,啓動後,全部燈閃了一下,而後是SYS和QSS燈亮,其餘燈滅。約2秒事後,全部燈從新閃了一下,而後重複只有兩燈亮,其他滅的狀況。ide

本路由器是看到學校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便可,很是方便!!!ui

配置RaspberryPi

原本RPi默認狀況下的GPIO端口是本身輸出的,也就是別人能夠經過它的GPIO端口來進行對Pi的調試操做。咱們如今要反着用,要用Pi來操做路由器。那麼首先請找到並確認RPi上面的端口:this

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/

相關文章
相關標籤/搜索