主要內容:在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
原本RPi默認狀況下的GPIO端口是本身輸出的,也就是別人能夠經過它的GPIO端口來進行對Pi的調試操做。咱們如今要反着用,要用Pi來操做路由器。那麼首先請找到並確認RPi上面的端口:this
將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。由於在其中是有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
命令有如下部分組成,你在輸入每一個命令以前確保上一條命令已經被執行完畢:
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/