更換 WL-700gE 軔體的方法相當容易,不過還是花了些時間測試。

剛取得機器的時候,透過出廠內建的 Bootloader CFE,在開機時按下 ezsetup 鈕,即可讓 CFE 進入 ‘Rescue mode‘ 接受 TFTP 上傳新的軔體,並自動燒入 nvram 中。

只要正確設定上傳方的 IP 與使用 TFTP Client,就可輕易的將軔體換成其他版本,細節可參考 OpenWrt Wiki 上的 HowTo。燒錄過程相當迅速,稍微計算一下,Flash 寫入 1.6M 的軔體,大約只需要 16 秒。

製作給 ASUS WL-700gE 的 OpenWrt 軔體也相當容易,由於開發者已經寫好 WL-700gE 的 Profile,你可以在 make menuconfig 時,直接選用 Broadcom BCM947xx/953xx [2.4],Profile 選 WL-700gE 即可。OpenWrt Buildroot 會為你建一個基本的軔體出來。

之所以選擇 2.4 核心的原因,是 WL-700gE 的無線網路驅動程式 broadcom-wl 目前只能在 2.4 上跑。而另外一組開放原碼的 b43 目前暫時只有 STA 模式,由於 mac80211 與 hostapd 的支援問題,Access Point mode 還無法使用。

困難的地方在於一開始測試時,並沒有外接 Console。於是時常碰到燒入後無法開機,或者開機後可使用,卻在一段時間或重開機後就無法連接的問題。

瞎子摸象了一段時間後,認命的參考 Adding a Serial Console to an Asus WL-700gE 一文,把機器拆解,拔掉內建的變壓器,並接上 Serial Console。拔除時,發現變壓器外裝只是用紙片隔離,感覺實在有點簡陋。

上圖腳位由上而下順序是 VCC(?), TX, RX, GND,電壓是 3.3V,終端機設定為 115200 bps 8N1。如此,就可以讀到所有的 Console Messages, 包含 CFE  等開機訊息

CFE version 1.0.37 for BCM947XX (32bit,SP,LE
Build Date: 四 12月 29 20:36:58 CST 2005 ([email protected]
Copyright (C) 2000,2001,2002,2003 Broadcom Corporation.

Initializing Arena
Initializing Devices.
et0: Broadcom BCM47xx 10/100 Mbps Ethernet Controller 3.90.23.0
rndis0: Broadcom USB RNDIS Network Adapter (P-t-P)
CPU type 0x29006: 264MHz
Total memory: 67108864 KBytes

Total memory used by CFE:  0x80800000 - 0x8089BA00 (637440)
Initialized Data:          0x80831B70 - 0x80834250 (9952)
BSS Area:                  0x80834250 - 0x80835A00 (6064)
Local Heap:                0x80835A00 - 0x80899A00 (409600)
Stack Area:                0x80899A00 - 0x8089BA00 (8192)
Text (code) segment:       0x80800000 - 0x80831B70 (203632)
Boot area (physical):      0x0089C000 - 0x008DC000
Relocation Factor:         I:00000000 - D:00000000

Device eth0:  hwaddr 00-17-31-A4-22-59, ipaddr 192.168.1.1, mask 255.255.255.0
 gateway not set, nameserver not set
Null Rescue Flag.
Null Rescue Flag.
10 seconds to Rescue mode...
Null Rescue Flag.

於是,終於讀到幾個小問題。這些問題是 OpenWrt 並未處理或提醒的

第一個編譯出來的 openwrt-brcm-2.4-squashfs.trx 必須小於 1802240 bytes。由於 WL-700gE 的 Flash 只有 2M,加上留給 CFE, configs 的空間。若超過大小,CFE 就會拒絕接受,下次重新開機會自動進到 Rescue mode

另外一個問題在於,squashfs 格式軔體,預設會試著找出 Flash 中的空餘空間,並利用 mini_fo 格式化為 jffs2、載入給系統使用。這在 Flash 夠大的機器上相當好用,因為你可以保持原本的軔體檔案,所有的設定修改都會被另存到額外的空間。

但是由於 WL-700gE 的 Flash 太小, 所以 mini_fo 根本沒有足夠的空間無法正確初始。以至於系統因此停滯/當機。系統會出現如下的錯誤訊息

mini_fo: build_sto_structure: failed to create storage dir [1].
mini_fo: get_neg_sto_dentry: ERROR building sto structure.

解法是關掉 firstboot / preinit / mount_root 中初始化 mini_fo/jffs2 的相關指令。

另外一個問題是 IDE 硬碟的初始化問題,由於 WL-700gE 的硬碟必須透過 GPIO 驅動,因此你必須先載入 diag.o 模組後,才能載入 IDE 相關模組與掛載檔案系統。這些也必須透過調整模組載入的優先值來修正問題。

最後是由於 Flash 根本太小,所以你得把主程式裝進硬碟中,並在 preinit 中作檔案系統掛載,並利用 pivot_root 或 chroot 來切換系統目錄。

當你都解決以上問題後,就終於可以開始使用 OpenWrt 了。:D

  • Ivan

    前日小弟我要更新WL-700gE確韌體至Version 1.0.7.8後郤不能開機了..不曉得是什麼原因(我想應是更新失敗了..)
    於是小弟又做了兩種更新如下:

    1.就用ASUS所提供的Firmware Restoration的工具,做了下列步驟:
    http://support.asus.com.tw/faq/faq.aspx?SLanguage=zh-tw&model=WL-700gE&os=8
    等了約莫三個小時依舊沒有動靜..
    於是用了第二個方法

    2.選擇另一種TFTP來更新,指令如下:
    tftp -i -v 192.168.1.1 PUT WL700gE_1.0.7.8.nas d:\
    (我有下指令-V用來看更新過程)
    —-更新明細———
    Packet received. len=4, opcode=ACK, block=16375
    Packet will be sent. len=516, opcode=DATA, block=16376
    Packet received. len=4, opcode=ACK, block=16376
    Packet will be sent. len=516, opcode=DATA, block=16377
    Packet received. len=23, opcode=5
    —-更新明細———
    郤又有錯誤訊息如下:
    —-錯誤訊息———
    Error occurred during the file transfer (Error code = 3):
    transfer cancelled
    —-錯誤訊息———
    就請問大家要如何解決此問題.因為我的WL-700gE只能設置在救援模式了..在此前謝謝大家

  • 乍看之下是 flash error, 若你的 nas 檔案是官方韌體,而非客制化過檔案太大的韌體。

  • WEST

    1.先確定您的韌體是完整下載.檔案沒有錯誤
    2.我的方法是網路線接LAN1 進入救援模式
    3.用 TFTP 將 WL700gE_1.0.4.6_flash.trx 上傳後
    4.再用Firmware Restoration 上傳新的 1078.nas
    5.等待幾分鐘就OK了
    希望有幫助到

  • MOS LWC

    如果我按 EZSETUP 都不能入resuce mode, 我可那樣辦?