6.16.2012

Uart and u-boot to factory firmware for wr-740n


其實…會測到serial port的原因,不外乎就是刷機刷掛了…
我想看看dd-wrt 是不是有如網路所說的這麼好用,所以直接從open-wrt改到dd-wrt…
結果就製造了一塊磚頭出來了…痛…
後來也由Uart配合tftp,把dd-wrt弄好了…結果…我真的覺得比open-wrt還不好用,也許是我不夠強,所以不好用吧,目前就覺得dd-wrt最多就是有中文化而已
(改了這一次後,就有點想把USB也拉出來說~)

一、為了救回來,只好把Uart的線拉出來,由這邊下指令才有辨法再燒東西進去
首先來看一下線路圖吧!
由於在OpenWrt的Wr740n型號中只有介紹V1.2版硬體的配置
所以需要到Wr741nd中找配線方式,如下圖就是要接出來的地方
(http://wiki.openwrt.org/toh/tp-link/tl-wr741nd#serial)
pin 86 for UART RX
pin 87 for UART TX


二、當然,從上面這麼密的地方接線,要注意的事比較多,若不小心短路到了就死了!
因此,我們從背面來,右到左為,TX, RX, GND,這二個腳位都是由上面打通孔到背面的,所以由這邊接最方便





三、接好Uart後,就先把com port先打開,上電,可以看到LED亮一下就馬上關閉再閃爍
這是因為它的bootloader預設一秒沒有辨法進入開機點,若是沒收到正確的指令就會再重開機
請在這時,不斷的一直連打「tpl」,這是通關密語~


四、接著就是要由uboot,經由網路,從我們自己架的tftp server把firmware的image抓進來,放到ram中,再由ram燒到flash中
    所以我們要先收集到我們所需要的資料才行,分別是:「flash燒錄的起始位址」、「ram的起始位址」、「IP」
1. 我們要先知道firmware (即kernel + filesystem)是在哪一個區域
由好的wr740中得到的資訊為:


這們可以了解到firmware的大小

2. 接著就是要設定bootloader的參數
由 ipaddr=192.168.1.123
serverip=192.168.1.100
得知目前wr-740的IP為192.168.1.123 ,而目標的server為192.168.1.100 -->可以改為我們的IP
>setenv ipaddr 192.168.1.1
>setenv serverip 192.168.1.10
(如果有注意在看,會發現圖和我寫的指令不一樣…這是因為我一開始用Win7 64bit,後來沒想法 tftp沒辨法連的起來,才又換了XP繼續進行 xd)


3. 又於參數中的 bootcmd=bootm 0x9f020000
可以了解到開機時,bootloader 由此處載入我們的firmware的
所以等一下要燒錄的起啟位址就是0x9f020000 !!
PS. 依經驗,這0x9Fxx-xxxx,應該是flash定址的起始位置,所以真正的寫入位址應該是0x20000 -->也就是從128KB處寫起
    也代表上面的mtd列表寫的,size 20000  "u-boot"就是bootloader所佔的空間大小

4. 然後因為我們的flash大小(即ROM)為4MB --> 0x400000
    所以(0x0040 0000) - (0x0002 0000) = 0x003E 0000  有這樣大小的flash是可以erase的

5. 由網路查到,要由tftp把firmware的image載到ram中的位址是 0x8000 0000
> tftpboot 0x80000000 1.bin
這可能代表AR7240這個CPU的RAM是由0x8000 0000這個位址開始定址的
(在網路上也找不到使用手冊,就只找的到datasheet,所以可能只有開發商才拿的到這資料吧)

五、開始燒錄!! 說了這麼多,重點還是要了解怎麼燒才行
1. 先到tftp32的網頁下載tftp server的軟體
http://tftpd32.jounin.net/tftpd32_download.html
這軟體解壓縮即可使用,很方便
指定我們已下載下來的原廠firmware,我解壓後改名為「wr740n.bin」
這邊找你機器的版本 (but.... 為何只有英文…沒有中文!!)
http://www.tp-link.com/en/support/download/?model=TL-WR740N
下載點
http://www.tp-link.com/resources/software/TL-WR740N_v1v2_100910.zip
下面是tftp的畫面,點「Browse」指定你的firmware的資料次即可


2. 首先把自己的IP設定為192.168.1.10

3. 這邊寫到一半,發現在Win7 x64的環境好像沒辨法工作,因此改到XP的環境下工作
(1)這時就要先把wr-740n 的Wan (就是原來對外的網路孔)和電腦的ethernet用網路線接起來了  
(2) 下 tftpboot 0x80000000 tplink.bin 指令 把image放到ram中


4. 這邊的 (3c0000 hex) 就是我們要寫入flash的大小
erase 0x9f020000 +0x3c0000
cp.b 0x80000000 0x9f020000 0x3c0000


最後再下一個
bootm 0x9f020000
新的firmware就開始跑了!!
大功告成!!呼~

5、補述一下,後來確認之前的猜想是對的
當我由原廠的firmware改為openwrt時-->用網頁更新
在Uart所吐出來的資訊為

確實0x20000 ~ 0x3E0000 這部份都是放firmware的

沒有留言: