【韌體】改造 La Fonera 成為 Serial (RS232) to Ethernet Converter



贊助商連結


FYI
2010-05-01, 09:49 PM
網路上對於La Fonera 的改造計畫可說不勝枚舉, 大多數網友玩的是增加支援SD/MMC, 其他不妨參考DD-WRT Wiki, 不過坦白說, 4MB Flash 小弟已經暫時用不完了, 更何況La Fonera 有8MB Flash, 安裝完DD-WRT 之後至少還有1.5MB Free! 此外挖洞焊接等等會把外觀和PCB 弄得很難看, 所以還是找點別的玩玩, 於是無意間看見以下這篇:

OpenWrt / Serial port (https://forum.openwrt.org/viewtopic.php?id=13161)
雖然以前也曾經瀏覽過 "Serial to Network Proxy (ser2net) (http://ser2net.sourceforge.net)" 這個計畫, 可是一來只支援Linux, 其次沒和Router 聯想在一起, 所以並未引起小弟的注意, 但最近小弟開始把韌體從DD-WRT 轉換到OpenWrt 之後, 真可說改得正是時候, 簡直不費吹灰之力, 一切就此水到渠成, 於是當這回看到那篇文章, 立刻就聯想到就是La Fonera!

曾經有網友希望能遠端遙控Modem 重啟, 其實只要有實體IP, 那就一切好辦, 問題是Bridge Mode 的話就沒轍了, 另外有位網友希望能遙控網管型交換器, 雖然交換器直接連接Modem, 問題是交換器的IP 是虛擬IP, 所以還是無法從網際網路直接遙控, 說來說去就是得透過另一台主機來遙控, 如果有哪台電腦正開著, 那當然沒問題, 但如果只為了這個目的而讓電腦一直開著, 則似乎又有點本末倒置, 一般來說會持續開機的設備並非沒有, 除了Modem 之外, 分享器就是其中之一, 而分享器本來就是一台微電腦, 如果能擴充其他用途豈不是更好? 話說一台Serial (RS232/422/485) to Ethernet Converter 要價少則兩三仟, 多則四五仟, 支援無線則更貴, 沒辦法, 此類多半屬於工業級應用, 而且以量制價, 反正羊毛出在羊身上, 但對於升斗小民來說價格未免太離譜, 況且一般人通常用不到用於遠距離的RS422/485, 所以用分享器來改造成為Serial (RS232) to Ethernet Converter 就成為一個經濟又實惠的主意, What a brilliant idea! 其實熟悉硬體的網友都知道網通產品通常會有1-2 個Serial Console, Modem 和網管型交換器的Console 通常設計在外殼上, 而分享器和語音閘道器則藏於機殼內, 今天的主角La Fonera 也不例外, 訊號是走LvTTL RS232, 3.3V

http://www.pczone.com.tw/pictures-thumb/0/4085251cbda6b8e467ca05196a3a1cde_613.jpg?dl=1272619288 (http://www.pczone.com.tw/members/3901-albums55-picture-613.jpg)http://www.pczone.com.tw/pictures-thumb/0/eedfa80e20394009adb12566fe1386b7_610.jpg?dl=1272619288 (http://www.pczone.com.tw/members/3901-albums55-picture-610.jpg)
硬體決定之後, 下一步當然就是挑選適合的韌體, 小弟曾經大力鼓吹DD-WRT, 確實DD-WRT 是一個不需要高深知識就可以輕易上手的殺手級韌體, 甚至殺到連Buffalo 也打算和BrainSlayer 攜手合作, 在Buffalo 的HP (High Power) 系列預先安裝DD-WRT:

BUFFALO HighPower routers with DD-WRT as factory firmware | www.dd-wrt.com (http://www.dd-wrt.com/site/content/buffalo-highpower-routers-with-dd-wrt-factory-firmware)
雖然DD-WRT 功能的確夠強大, 然而對於想要自行擴充功能的DIYer 來說, DD-WRT 的自由度其實並不高, 所以結論是DD-WRT 非常適合懶人, 該有的功能都具備了, 但不適合崇尚自由的DIYer, 這時候你需要更 "開放" 的OpenWrt, 以往DD-WRT 有個非常吸引人的特色, 也就是支援的平台非常多, 所以DD-WRT 支援列表 (http://www.dd-wrt.com/wiki/index.php/Supported_Devices)就成為非常具有參考價值的選購指南, 但是如今OpenWrt 也不遑多讓, 從Backfire 起, OpenWrt 也逐漸擴大支援範圍, 除了原有的Broadcom 平台以外, Atheros 優異的硬體規格也逐漸成為另一個主要的平台, 再加上OpenWrt 架構愈來愈趨向於Linux 標準化, 以及努力擺脫嵌入式系統的限制, 這使得只要懂一點Linux 就可以很快上手, 話說本篇前言廢話如此之多, 實在是因為安裝過程簡直超乎想像的容易, 擔心吸引不了大家的目光, 所以先把事情原委敘述一番, 廢話不多說, 就此進入正題

首先當然是把DD-WRT 換成OpenWrt, 不過在此得先做一點功課, OpenWrt 雖然彈性非常大, 但是據說設定介面很陽春, 許多功能都必須透過手動輸入指令, 所以很容易讓人以為又回到了侏儸紀的DOS 時代, 不過當OpenWrt Kamikaze 趨於穩定之後, 專為OpenWrt 所設計的網頁設定套件X-Wrt Webif² (http://x-wrt.org) 也適時趕上, 讓OpenWrt 和X-Wrt 的結合成為最佳拍檔, 而X-Wrt 更推出預先打包好的韌體, 以方便網友無痛升級, X-Wrt 整合式韌體共分為default, no_pppoe, openvpn 和extra, 小弟推薦openvpn 版, 網友也可以考慮extra 版, 韌體決定好之後, 接下來就是面對令人頭痛的刷機, 不少網友都是在這一關把La Fonera 變成了磚塊 (Bricked)! 但是現在只要 "一指神功" 就可以化繁為簡, 不再把刷機視為畏途, 所使用的秘密武器就是Fon Flash:

fon_flash [Gargoyle Wiki] (http://www.gargoyle-router.com/wiki/doku.php?id=fon_flash)
Fon Flash 除了支援OpenWrt 之外, 同時也支援DD-WRT 和FON 原廠韌體, 請安照Fon Flash 介面指示操作, 第一步先選擇Gargoyle/OpenWrt, 第二步選擇連接La Fonera 的網路卡, 第三步輸入atheros-root.squashfs 的完整路徑, 第四步輸入atheros-vmlinux.gz 的完整路徑, 最後按下Flash Router Now, 等5 秒之後再開啟Lan Fonera 的電源, 接下來請留意Fon Flash 的訊息, 如果不斷重複某個Arp 訊息, 代表Fon Flash 已經錯過了攔截RedBoot 的時機, 請重新啟動La Fonera, 可以的話, 請盡可能先正常啟動, 然後登入La Fonera 設定頁面再執行Reboot, 另一個提高成功率的方法是以交換器連接La Fonera 和PC, 目的是縮短Windows 對網卡初始化所需要的時間, 以Linux 刷機則無此問題, 刷機需時25-30 分鐘, 請務必耐心等候

http://www.pczone.com.tw/pictures-thumb/0/385ef1fc4f207fefb3c816b5ee11ace1_614.png?dl=1272687214 (http://www.pczone.com.tw/members/3901-albums55-picture-614.png)
刷機成功之後, OpenWrt 預設IP 為192.168.1.1, 請自行調整以避免和Modem 衝突, OpenWrt 初始設定請參考:

【韌體】ASUS WL-HDD2.5 改刷 OpenWrt Kamikaze with X-Wrt Webif² - PCZONE 討論區 (http://www.pczone.com.tw/thread/44/150740/)
接下來要談的重頭戲就是OpenWrt 勝過DD-WRT 的地方 - 擴充套件, 如果不談套件的話, 那麼DD-WRT 基本功能確實為OpenWrt 所不及, 但是一旦談到套件, 則OpenWrt 的自由度和擴充性則遠遠勝過DD-WRT, 固然DD-WRT 也可以將套件安裝於JFF2, 但由於套件的設計都是基於OpenWrt 的架構, 因此在DD-WRT 之下裝完套件之後, 還必須針對DD-WRT 的架構進行許多繁瑣的調整, 這必須具備DD-WRT 的相關知識才能完成, 但是對於OpenWrt 來說, 套件安裝完畢, 通常只需根據不同的硬體, 調整1-2 個設定檔就完工了, 真是事半功倍, 不過話說回來, 不論是DD-WRT 或者OpenWrt, 瞭解硬體是有必要的, 因為套件的預設值通常是針對某個硬體 (Broadcom?) 而設計, 若硬體不同, 則設定可能也不同, 在DD-WRT 之下安裝OpenWrt 套件會遇上哪些困難, 請參考:

【軟體】DD-WRT v24 安裝 PPPoE Relay 套件 - PCZONE 討論區 (http://www.pczone.com.tw/thread/29/150690/)
以下示範如何安裝兩個OpenWrt 套件和一個執行檔, 操作之前請確定La Fonera 已經連上網際網路, 請登入X-Wrt Webif², 然後點選System -> Packages, 先點一下Update package lists, 作用是從網路下載最新的套件列表, 接著在Available packages 之下就可以找到setserial 和ser2net 這兩個套件, 請點選套件左方的Install, 接著就會自動安裝, 過程超乎想像得輕鬆愉快! 安裝另一個執行檔stty 則稍微複雜一點, stty 包含在coreutils 套件之中, 只有40KB, 而coreutils 套件約1.3MB, 為了40KB 而安裝1.3MB 似乎有點說不過去, 而且Flash 的可用空間有限, 變通之道就是先下載coreutils 套件至PC, 再以7-Zip 取出stty, 然後設法傳送至La Fonera, 小弟採用的方法是在Windows 安裝Tftpd32 或HTTP File Server, 然後登入OpenWrt, 再以tftp 或wget 下載至/usr/bin, 並執行:

chmod +x /usr/bin/stty
首先必須把Serial Console 的控制權釋放出來, OpenWrt 啟動之後, Busybox 會佔用Serial Console, 所以也可以從Serial Console 登入, 以下可看出Broadcom-based 分享器預設Console Port 為/dev/tts/0, 而Atheros-based 則為/dev/ttyS0, 修改/etc/inittab

::sysinit:/etc/init.d/rcS S boot
::shutdown:/etc/init.d/rcS K stop
#tts/0::askfirst:/bin/ash --login
#ttyS0::askfirst:/bin/ash --login
#tty1::askfirst:/bin/ash --login
其次針對硬體和應用程式調整上述安裝好的兩個套件, /etc/ser2net.conf

# <TCP port>:<state>:<timeout>:<device>:<options>
2001:raw:600:/dev/ttyS0:9600 NONE 1STOPBIT 8DATABITS -XONXOFF LOCAL -RTSCTS remctl
2002:raw:600:/dev/ttyS0:38400 NONE 1STOPBIT 8DATABITS -XONXOFF LOCAL -RTSCTS
2003:raw:600:/dev/ttyS0:57600 NONE 1STOPBIT 8DATABITS -XONXOFF LOCAL -RTSCTS
2004:raw:600:/dev/ttyS0:115200 NONE 1STOPBIT 8DATABITS -XONXOFF LOCAL -RTSCTS
/etc/init.d/setserial

#!/bin/sh /etc/rc.common
# Copyright (C) 2006 OpenWrt.org

START=15
boot() {
/usr/sbin/setserial /dev/ttyS0 irq 37
/usr/bin/stty -F /dev/ttyS0 speed 9600 raw -echo
/usr/sbin/ser2net -u
}
修改完畢請執行:

/etc/init.d/setserial enable
/etc/init.d/setserial start
/dev/ttyS0 所使用的IRQ 可由dmesg 找到, 由於OpenWrt 可能會發送系統訊息至Serial Console, 所以還必須進行必要的調整, /etc/config/system

config 'system' 'system'
option 'hostname' 'OpenWrt'
option 'timezone' 'UTC-8'
option 'conloglevel' '3'
option 'kconloglevel' '3'
看到這裡, DD-WRT 的玩家可能會很羨慕, 因為在DD-WRT 之下, 要想控制Serial Console 並不是一件容易之事, 就算有辦法控制, 還得避免系統訊息干擾通訊, 解決之道只有設法修改Kernel command line, 但重新編譯又未免小題大作, 不過如果分享器的Boot Loader 為RedBoot 的話, 例如La Fonera, 那麼倒是有一個變通之道, 也就是修改RedBoot 的boot_script_data, 在 "fis load" 之後加入幾行mfill 指令, 例如:

RedBoot> fis load -d vmlinux.bin.l7
Image loaded from 0x80041000-0x80279086
RedBoot> d -b 0x8024E5B0 -l 64
8024E5B0: 63 6F 6E 73 6F 6C 65 3D 74 74 79 53 30 2C 39 36 |console=ttyS0,96|
8024E5C0: 30 30 20 72 6F 6F 74 66 73 74 79 70 65 3D 73 71 |00 rootfstype=sq|
8024E5D0: 75 61 73 68 66 73 2C 6A 66 66 73 32 20 69 6E 69 |uashfs,jffs2 ini|
8024E5E0: 74 3D 2F 65 74 63 2F 70 72 65 69 6E 69 74 00 00 |t=/etc/preinit..|
RedBoot> mfill -b 0x8024E5B8 -l 5 -p 0x2f -1
RedBoot> mfill -b 0x8024E5B9 -l 1 -p 0x64 -1
RedBoot> mfill -b 0x8024E5BA -l 1 -p 0x65 -1
RedBoot> mfill -b 0x8024E5BB -l 1 -p 0x76 -1
RedBoot> mfill -b 0x8024E5BD -l 1 -p 0x6E -1
RedBoot> mfill -b 0x8024E5BE -l 1 -p 0x75 -1
RedBoot> mfill -b 0x8024E5BF -l 2 -p 0x6C -1
RedBoot> mfill -b 0x8024E5C1 -l 1 -p 0x20 -1
RedBoot> d -b 0x8024E5B0 -l 64
8024E5B0: 63 6F 6E 73 6F 6C 65 3D 2F 64 65 76 2F 6E 75 6C |console=/dev/nul|
8024E5C0: 6C 20 20 72 6F 6F 74 66 73 74 79 70 65 3D 73 71 |l rootfstype=sq|
8024E5D0: 75 61 73 68 66 73 2C 6A 66 66 73 32 20 69 6E 69 |uashfs,jffs2 ini|
8024E5E0: 74 3D 2F 65 74 63 2F 70 72 65 69 6E 69 74 00 00 |t=/etc/preinit..|
RedBoot> exec
把原先看起來像是:

console=ttyS0,9600 rootfstype=squashfs,jffs2 init=/etc/preinit
修改成:

console=/dev/null rootfstype=squashfs,jffs2 init=/etc/preinit
如此一來就可以省去重新編譯韌體的麻煩, 只要控制RedBoot 就可以控制OpenWrt 系統訊息, 由於OpenWrt 有提供單獨的vmlinux 韌體, 所以要從記憶體之中找到以上指令的位置並不困難, 但DD-WRT v24 SP1 以後把vmlinux & rootfs 包在一起又加上標頭, 所以就困難多了, 有Linux 作業系統的網友則還有另一個辦法, 也就是利用Firmware Modification Kit (http://www.bitsum.com/firmware_mod_kit.htm) 把vmlinux 解開來, 修改後再打包回去, 但Windows 用戶就只能乾瞪眼了

以上全數安裝完畢, 總得設法測試一下, 如果沒有傳輸線的話, 也可以直接利用現有的Modem, 但是請先弄清楚腳位定義, 在此只需要連接三條線, GND 直接對接, Tx/Rx 則需交錯, 小弟實驗過程是以傳輸線測試, 測試軟體為Hercules SETUP utility (http://www.hw-group.com/products/hercules/index_en.html), 或者其他支援RFC2217 的通訊軟體也可以, 測試環境如下:

PC-COMx <-RS232-> /dev/ttyS0-Fonera-eth0.0 <-Ethernet-> PC-NIC
開啟Hercules SETUP utility, 點擊Serial, 依序設定COM3, 9600, 8, none, OFF, Free, 最後點擊Open, 再開啟另一個Hercules SETUP utility, 點擊TCP Client, Module IP:192.168.1.1, Port:2001, 最後點擊Connect, 請在兩個Hercules SETUP 視窗分別輸入英數字, 下一項測試請重複以上, 但將Baud Rate 改成115200, Port:2004, 由以上測試可得知ser2net 的彈性設計, ser2net 所支援的Baud Rate 上限為115200bps, 這也是一般Linux Router Console 所設定的速率

改造La Fonera 至此還有一個關鍵未完成, 除了OpenWrt 會發送系統訊息之外, RedBoot 啟動時也會發送訊息至Serial Console, 而網友遇上刷機失敗時, 通常也會改由Serial Console 刷機, 所以RedBoot 訊息是難以避免的, 此外, 第一代La Fonera (FON2100) 還有個大問題就是開機時Rx 必須維持0V, 否則無法啟動, 固然可以先啟動La Fonera, 後啟動被控制的設備, 但只要有限制就代表可能會造成不便, 解決之道就是利用La Fonera 的GPIO (3.3V), 以簡單的電晶體開關電路控制啟動時Tx/Rx 皆為低電壓, 一來解決FON2100 的開機問題, 二來也可以彈性控制RedBoot 發送的訊息, 不過小弟認為其實最適合用來改造的應該是La Fonera 1.1 (FON2200), 除了不再有Rx 必須為Low 的問題之外, 還解決了第一代La Fonera 惱人的發熱問題, 體積小, 價格又便宜, 另一個體積也很小的產品則是ASUS WL-330gE (http://oldwiki.openwrt.org/OpenWrtDocs(2f)Hardware(2f)Asus(2f)WL330GE.html), 但是價格就很離譜了

結論:
或許網友並不認同以上過程可以稱得上 "輕鬆愉快", 但是看得懂其中關鍵的網友則心知肚明, 若改以DD-WRT 實做的話更是困難重重, 其實小弟對於Linux 也只有一知半解, 但是單憑僅有的三腳貓功夫就可以完成以上任務, 相信只要網友對於Linux 有興趣, 則必定可以從其中得到更多的樂趣

Kamikaze Installation - X-Wrt (http://wiki.x-wrt.org/index.php/Kamikaze_Installation)
install_guide [Gargoyle Wiki] (http://www.gargoyle-router.com/wiki/doku.php?id=install_guide)
OpenWrtDocs/OpenWrtDocs/KamikazeBootHowTo - OpenWrt Wiki (http://oldwiki.openwrt.org/OpenWrtDocs(2f)OpenWrtDocs(2f)KamikazeBootHowTo.html)
System configuration - OpenWrt Wiki (http://wiki.openwrt.org/doc/uci/system)
Fonera - OpenWrt Wiki (http://wiki.openwrt.org/toh/fon/fonera)
LaFonera Hardware IO (en) - DD-WRT Wiki (http://www.dd-wrt.com/wiki/index.php/LaFonera_Hardware_IO_%28en%29)
Category:LaFonera (en) - DD-WRT Wiki (http://www.dd-wrt.com/wiki/index.php/Category:LaFonera_%28en%29)
OpenWrt / Fonera 2100 serial console need urgent help (https://forum.openwrt.org/viewtopic.php?id=24078)
【FON】To Brick, or not to Brick: that is the question - PCZONE 討論區 (http://www.pczone.com.tw/thread/16/140386/)
【下載】Free Serial Port Monitor - PCZONE 討論區 (http://www.pczone.com.tw/thread/67/131934/)

贊助商連結


RouterOS
2010-05-01, 10:42 PM
值得好好來拜讀研究研究.............請受小弟一拜

FYI
2010-05-02, 01:25 PM
其實小弟很想談一談從DD-WRT "跳槽" 到OpenWrt 的 "心路歷程", 小弟當然清楚重新學習一個作業系統的困難, 所以原先也一直抗拒轉換跑道, 再加上已經熟悉和適應DD-WRT 的架構, 所以對於不熟悉的OpenWrt 存有一種不確定感, 此外, 最重要的還是DD-WRT 的基本功能非常豐富, 根本不太需要自己動手增加什麼功能, 尤其對於無線的控制而言, 網友會想要從原廠韌體改刷DD-WRT, 通常為的也是DD-WRT 對於無線的超強設定, DD-WRT 可以輕易完成Client Bridge, Repeater, WDS 和一些廠商自創的噱頭, 例如Universal Repeater, WISP 等等, 其實不過是在網路架構上玩一些花樣, 但對於DD-WRT 來說, 也只是把WAN, LAN, WLAN & Virtual WLAN 重新排列組合而已, 變出的花樣又豈只那兩樣? 這部份即使現在已經轉換到OpenWrt, 小弟還是不得不承認DD-WRT 仍然是地表上最強的, 然而BrainSlayer 似乎認為DD-WRT 的功能已經夠豐富了, 所以是否方便擴充也就顯得不是那麼重要, 而小弟在拜讀過許多討論之後, 為了完成本次實驗, 最後還是不得不放棄DD-WRT, 以下就分成三個部份來討論

會在Serial Console 顯示的訊息共有三種: Boot Loader, Kernel Messages & Busybox Login, Boot Loader 相當於PC 的BIOS, 所以對於DD-WRT 或OpenWrt 都無可避免, 在此暫且不提, 而Kernel Messages 是一個比較棘手的問題, 一般來說除了重新編譯韌體之外, 別無他法, 其實也有網友發現RedBoot "exec -c kernel_command_line" 指令可以傳送參數至Kernel, 無奈DD-WRT 和OpenWrt Kernel 都不予理會, 所以這部份對於DD-WRT 來說, 除了修改韌體之外, 基本上無解, 但小弟意外從 "OpenWrt Kamikaze Wiki (http://wiki.openwrt.org/doc/uci/system)" 中發現控制 "conloglevel" 和 "kconloglevel" 就可以控制Kernel Messages, 至於是哪個參數的影響, 小弟並未深入研究, 但此一發現已經使得以OpenWrt 改機將會比DD-WRT 容易得多

搞定Kernel Messages 之後, 下一步要解決的就是Busybox Login 一開始就綁住Serial Console, 以Google 搜尋 "DD-WRT serial console detach OR disable OR disconnect OR unbind", 則很容易就找到以下這篇:

DD-WRT Forum :: View topic - Turn off serial console, stty (http://www.dd-wrt.com/phpBB2/viewtopic.php?t=28104)
所有方法都指向一支程式 "setconsole", 許多網友發現DD-WRT Busybox 也是把/dev/tts/0 (Broadcom-based) 綁死了, 就算有辦法編譯出支援setconsole 的Busybox, 也無法把Busybox 轉到/dev/null, 只有少數支援兩個實體Serial Console 的Linksys 分享器, 才有辦法把Busybox 轉到/dev/tts/1, 所以對於分享器只有一個Serial Console 的DD-WRT 網友來說, 這回又再度希望破滅, 既然/dev/null 不能用, 於是小弟參考 "Linux Serial Console - DD-WRT - Trac (http://svn.dd-wrt.com:8000/dd-wrt/browser/src/linux/danube/linux-2.6.23/Documentation/serial-console.txt)", 設法以mknod 在La Fonera 製造出一個虛擬的/dev/ttyS1 , 只可惜徒勞無功, 可能小弟知其然不知其所以然吧! 然而對於DD-WRT 是如此艱鉅的大工程, 在OpenWrt 卻只要修改/etc/inittab 其中一行就結束了, DD-WRT 網友看了豈不是立刻暈倒並口吐白沫!?

最後是系統架構的問題, DD-WRT 的架構似乎還停留在原始的Linksys 架構, 或者近似於OpenWrt WhiteRussian, 這點小弟不敢斷定, 因為小弟一開始接觸OpenWrt 就是從Kamikaze 學起, 如果網友已經滿足於DD-WRT 所提供的功能, 那麼能否擴充也就不那麼重要, 如果網友只需要擴充一兩個套件, 那麼DD-WRT 也還不至於那麼難搞, 但是如果網友想要擴充很多套件, 那麼DD-WRT 真的可以把人搞死! 坦白說, "架構" 就是DD-WRT 的包袱, 瞭解OpenWrt 演變的網友就可以瞭解何以OpenWrt 改版速度緩慢的原因, 從WhiteRussian 到Kamikaze 雖然進度緩慢, 但可說是往前邁進了一大步, 這一步就是擺脫Linksys 所留下來的餘毒 - NVRAM, 這也更顯示出OpenWrt 與DD-WRT 兩者研發方向的不同, DD-WRT 只專注於開發更多的平台, 但OpenWrt 卻很努力於打好基礎, 然後像龜兔賽跑的烏龜一樣, 後發先至, 其次, 學過Linux 的網友再去研究OpenWrt Kamikaze 將不會覺得困難重重, 但是研究DD-WRT 的架構則會覺得似乎又得重頭學起, 因為處處顯示出DD-WRT 的特殊性, 最後就會反應在開發過程, 小弟在上一篇已經提過, 在OpenWrt Kamikaze 之下安裝套件, 如果需要啟動即執行, 那就會在/etc/init.d 建立個別的啟動腳本, 但DD-WRT 的Startup Script 卻是得自己想辦法, 而且可能需要把不同套件所需要的腳本集中到幾個DD-WRT 預先定義的Startup Script 之中, 這使得開發和管理都很麻煩, 小弟上回撰寫以Reset 按鈕當作無線開關 (http://www.pczone.com.tw/thread/29/150684/)的腳本和實做DD-WRT v24 安裝 PPPoE Relay 套件 (http://www.pczone.com.tw/thread/29/150690/), 當時就已經發現怎麼這麼麻煩, 此回以X-Wrt 預先打包好的介面安裝套件, 簡直可以說是一個接一個, 幾乎順利得不知節制, 怎麼會相差這麼多?

綜合以上理由, 對於有興趣DIY 分享器的網友, 小弟誠心推薦OpenWrt + X-Wrt 的絕佳組合, 對於目標是QoS 的網友, 小弟推薦OpenWrt + Gargoyle, 但是以上兩個Webif 目前尚未推出整合剛出爐的OpenWrt Backfire 的整合韌體, 所以請耐心等待, 此外目前對於Backfire 所支援的新硬體尙不明確, 小弟個人非常看好Atheros AR71xx 平台優異的硬體規格, 網友不妨直接參考Backfire 的韌體列表, 或許可以窺知一二

http://downloads.openwrt.org
RedBoot User's Guide (http://www.ecoscentric.com/ecospro/doc.cgi/html/redboot-guide/redboot-guide.html)

FYI
2010-05-02, 09:45 PM
根據X-Wrt 安裝教學, OpenWrt 內建Webif 應該就是LuCI (http://luci.subsignal.org/trac/wiki/Installation), 而小弟突然有一個想法, 由於小弟安裝的是Gargoyle 版OpenWrt, Gargoyle 的特色是QoS, 而且Gargoyle 所打包的QoS 套件似乎又比X-Wrt 打包的extra 版優異, 但小弟還希望有足夠空間安裝OpenVPN, 若按照X-Wrt 的教學, 安裝X-Wrt Webif² 之前必須先移除LuCI, 原因很可能是基於兩者使用同一個httpd, 但小弟最終目的是希望能同時利用X-Wrt 豐富的介面和Gargoyle 優異的QoS, 而剛才發現Gargoyle 使用獨立的httpd_gargoyle, 於是似乎出現了一線曙光, 經過研究之後, 終於找出讓Gargoyle 和X-Wrt 並存的方法, 由於X-Wrt 套件比較單純, 而Gargoyle 關聯的套件比較複雜, 所以建議先安裝Gargoyle 打包好的韌體, 再另外安裝X-Wrt Webif² 套件

完成安裝Gargoyle 版本的OpenWrt 之後, 為了避免和X-Wrt Webif² 衝突, 建議Gargoyle Webif 只啟用https, 或者http 改成8080 埠, 而X-Wrt Webif² 只啟用TCP 80, 不啟用SSL, 接下來請執行:
以PuTTY 登入OpenWrt
參考 "Changing opkg.conf (http://wiki.x-wrt.org/index.php/Kamikaze_Installation#Changing_opkg.conf)" 修改/etc/opkg.conf
opkg update
opkg -nodeps install webif
opkg install webif-vpn
由於Gargoyle 會強制關閉httpd, 所以還必須修改/etc/init.d/httpd_gargoyle

# rc_httpd=$(ls /etc/rc.d/*httpd 2>/dev/null)
# if [ -n "rc_httpd" ] ; then
# /etc/init.d/httpd stop 2>/dev/null
# /etc/init.d/httpd disable 2>/dev/null
# fi
修改完畢請執行:

/etc/init.d/httpd_gargoyle enable
/etc/init.d/httpd enable
由於Gargoyle 套件和OpenVPN 套件的檔案都很龐大, 所以最後發現4MB Flash 不足以同時安裝兩者, 請務必隨時以df 檢查Flash 所剩空間, 此外, Gargoyle Webif 和X-Wrt Webif 並存可能會佔用不少資源, 所以建議以SES/AOSS 按鈕控制兩者循序啟動和關閉, 腳本則請參考 "WifiToggle² - 以Reset 按鈕當作無線開關 (http://www.pczone.com.tw/thread/44/150740/#post1087982)"

mis339
2010-05-02, 10:23 PM
看了半天,老了,我想我還是把La Fonera珍藏起來或是直接寄給FYI改比較快……

FYI
2010-05-05, 04:17 PM
看了半天,老了,我想我還是把La Fonera珍藏起來或是直接寄給FYI改比較快……
你這傢伙! 上回幫你寫了一個Send-Rpt.bat (http://www.pczone.com.tw/post/1087491/14/), 然後就像石沉大海一般...虧你還說什麼回文典範...

辛辛苦苦弄了個FON Converter, 結果發現ICPlus IP210T/IP210S (http://www.icplus.com.tw/tw/product.htm) 一顆晶片就可以完成Serial to Ethernet, 照說以這兩顆晶片生產出來的產品應該很便宜才對, 不過話說在商用上, 一個Serial Port 似乎不夠用, 而Linksys 分享器最多也只能弄出兩個Serial Ports, 有些POS 一下子就得用到四個Serial Ports, 所以這個玩具也只能留著自己玩玩

LuCI 和X-Wrt 不能並存的原因似乎不是共用httpd, 很可能是部份檔案命名互相重疊, 而且都放在/www 底下, 而Gargoyle 就刻意避開前兩者所使用的檔名, 所以雖然檔案同樣放在/www 底下, 但並存沒什麼問題, 只要使用不同的通訊埠即可

FYI
2010-10-10, 07:35 PM
意外發現OpenWrt 套件之中有幾個以 "kmod-usb-serial" 開頭的檔案:

kmod-usb-serial-ark3116
kmod-usb-serial-cp2101
kmod-usb-serial-ftdi
kmod-usb-serial-pl2303
顯然都是USB to Serial cable 的驅動程式, 可惜小弟沒有附帶USB 埠的分享器, 所以無法研究其用法, 只好留待網友自行研究

thx
2012-08-05, 03:31 AM
kmod-usb-serial-ark3116
kmod-usb-serial-cp2101
kmod-usb-serial-ftdi
kmod-usb-serial-pl2303
都是usb to serial driver,像是usb to serial LCD 就要裝 kmod-usb-serial-pl2303多

FYI大作法清楚 不過建議刷我編的韌體省事
OSSLAB firmware - OSSLab::開放軟體實驗室(Open Source Software Lab) (http://www.osslab.com.tw/Hardware/Open_Embedded_System/MIPS/Atheros/WR-703N/OSSLAB_firmware)

只要再裝上 ser2net, 跟修改開機自動啟動就可
搭配這virutal port更方便
HW VSP (Virtual Serial Port) - Free Virtual Serial Port to connect any TCP/IP Terminal server to your Windows as a virtual serial port (http://www.hw-group.com/products/hw_vsp/index_en.html)
用於UPS 改成網路型ups 應該ok.有其他應用想法跟我說...