目標
透過更換韌體將 TP-LINK TL-WR1043ND 變成一台支援 OpenFlow 1.3 的 switch
準備工作
- 確認 TP-Link TL-WR1043ND 的 firmware 版本 (可以在外盒找到)
- 至 OpenWRT wiki - TP-Link TL-WR1043ND 查詢適用的 OpenWRT 版本
- 一台 Linux 的機器
環境
- TP-Link TL-WR1043ND version 1.1
- Ubuntu Linux 14.04 (32/64 bit)
編譯(cross-compiling)步驟
- 使用一般使用者帳號,官網文件有說明不要使用 root 帳號來編譯
安裝編輯 OpenWRT 所需的套件 (on Linux)
apt-get install build-essential binutils flex bison autoconf gettext \
texinfo sharutils subversion libncurses5-dev ncurses-term zlib1g-dev gawk git-core下載 OpenWRT source (Attitude Adjustment 12.09 stable)
git clone http://git.openwrt.org/12.09/openwrt.git
切換至 openwrt 資料夾
cd openwrt
將 feeds.conf.default rename
mv feeds.conf.default feeds.conf
下載並安裝所有可用的 feeds
./scripts/feeds update -a
./scripts/feeds install -a
安裝所有 luci Web UI 的套件
./scripts/feeds install -a luci
-
設定並選擇想要編譯的套件
make menuconfig
- Target System: Atheros AR7xxx/AR9xxx
- Target Profile: TP-LINK TL-WR1043N/ND
- LuCI -> Collections -> luci
註: 套件可以編譯成 built-in 或者 package,若編譯成 package,需要再透過 opkg 進行安裝
下載 CPqD 的 OpenFlow for OpenWRT 的 source
git clone https://github.com/CPqD/openflow-openwrt.git
-
建立 symbolic link
- ~/openwrt/packages/openflow-1.3 -> ~/openwrt/openflow-openwrt/openflow-1.3
cd ~/openwrt/packages/
ln -s ~/openwrt/openflow-openwrt/openflow-1.3/
- ~/openwrt/files -> ~/openwrt/openflow-openwrt/openflow-1.3/files
cd ~/openwrt
ln -s ~/openwrt/openflow-openwrt/openflow-1.3/files
- ~/openwrt/packages/openflow-1.3 -> ~/openwrt/openflow-openwrt/openflow-1.3
-
選擇編譯 OpenFlow 的套件
make menuconfig
- Network -> openflow.......................... Open Flow 1.3 Switch Userspace Package
編譯
make
後續工作
編譯完成後,會在 ~/openwrt/bin/ar71xx 資料夾產生四個 binary file
- openwrt-ar71xx-generic-tl-wr1043nd-v1-*-factory.bin
- 適用於仍是官方軔體的 TL-WR1043ND,可透過原廠的 Web UI 上傳並寫入軔體
- openwrt-ar71xx-generic-tl-wr1043nd-v1-*-sysupgrade.bin
- 適用於已安裝 OpenWRT 的 TL-WR1043ND,可透過下列任一種方式
- LuCI Web UI 上傳並寫入韌體
- 上傳至 WR1043ND 上再透過
sysupgrade
指令寫入新的軔體
- 適用於已安裝 OpenWRT 的 TL-WR1043ND,可透過下列任一種方式
Reference
[1] https://github.com/CPqD/ofsoftswitch13/wiki/OpenFlow-1.3-for-OpenWRT
[2] http://wiki.openwrt.org/doc/howto/buildroot.exigence