[Hack]_將TP-LINK WR941ND V5刷上Open-WRT+OpenFlow1.3+Open vSwitch(失敗)
※先講為何OVS的部分失敗了,因為FLASH只有4MB,因此無法塞入順利執行…所以你如果很執著在4MB的機種做這件事情,勸你回頭是岸…別浪費時間啦~,當然本篇還是可以順利把你的941ND裝上OpenWRT啦~
最近在成大的研究所課堂上學習SDN,懂點皮毛就想要直接IMPLEMENT在實際的環境下,
不過沒有設備開怎辦咧…
手邊有RouterBoard,其上的RouterOS是能夠直接打OpenFlow 1.0的package進去,但也只有1.0
且手邊的RouterBoard也不是空閒可以拿來做Lab的XD
於是想到還有台TP-LINK WR941ND跟741ND,
因此我就先拿WR941ND來動刀吧…
另外需要先說明的是WR941ND這裡是V5版的,其他版本能夠支援到最高OPENWRT的板號請參考:http://wiki.openwrt.org/toh/tp-link/tl-wr941nd下的Supported Versions,例如V3.x版只能吃到Backfire 10.03,你想要嘗試就必須更改相關的source code下載來源!,而這裡操作的版本為V5,則可到Attitude Adjustment 12.09(2015/11/04嘗試修改841ND V8的15.09並刷入941ND V5成功!)
根據討論串:https://forum.openwrt.org/viewtopic.php?pid=206667#p206667
指出,941ND V5的硬體架構與841ND V8的架構是一致的,也因為Open-WRT官方並沒有釋出941ND V5的支援韌體
因此要在841ND V8底下動點手腳,或者你也可以自己透過12.09版的Open-WRT原始碼編譯。
因為我要加入OVS的支援,所以要用編譯的方式…,不過如果你的941ND還為官方版本,
可以先練習一下上述討論串的指導步驟,我這邊也翻譯成中文對照一下:
1.下載官方編譯好給WR841ND V8的韌體:http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/openwrt-ar71xx-generic-tl-wr841n-v8-squashfs-factory.bin
*2015/11/04:如果你要裝最新的15.05,可以下載這個,後面改型號跟md5的步驟完全一樣(新版可以用opkg install openvswitch安裝,但會出現仍然空間不足不讓你安裝的提示)https://downloads.openwrt.org/chaos_calmer/15.05/ar71xx/generic/openwrt-15.05-ar71xx-generic-tl-wr841n-v8-squashfs-factory.bin
2.可透過vim編輯,參數:%! xxd進入16進位編輯模式,將0x40的位置由0841 0008修改為0941 0005,然後在下vim指令:%! xxd -r回去一般模式在儲存(不能直接:wq喔!)。
3.下載mktplinkfw.c, md5.c, md5.h並用gcc -Os mktplinkfw.c md5.c -o mktplinkfw把他們編譯起來成為mktplinkfw,稍後要使用此程式檢查韌體md5。
4.編譯好之後,透過./mktplinkfw -i openwrt-ar71xx-generic-tl-wr841n-v8-squashfs-factory.bin來檢查剛剛修改的韌體。
5.會發現他偵測到現在的韌體本身的md5跟韌體內描述的md5不相符合,其中有一段顯示:
expected : e5 67 34 4d 04 99 20 60 f5 76 c6 04 15 81 ab f8
請一樣透過第二步驟回頭修改韌體中的內容,在0x4c的部分可以開始修改韌體內描述的md5為上面經計算後新的md5做替換,最後你的編輯器顯示的部分片段應該會像下圖:
6.再做一次第四步驟,這時應該會告訴你md5檢查ok!
7.接著你就可以到941ND官方韌體管理頁面中直接透過正常手續更新韌體,如果你的步驟都沒問題…你就可以獲得一台有OpenWRT的941ND
如果你不想這麼麻煩,接下來也不想要自己編譯什麼,你只想要讓941ND有OPENWRT這樣就好了
那麼原討論串作者有提供他修改好的版本:https://hal9k.ifsc.usp.br/~matias/floss/openwrt/tl-wr941nd_v5.0.bin,MD5驗證整個檔案為db062f1699c760775c5046cc303cba91
我這邊也MIRROR一下我修改好的版本:https://www.ntex.tw/ShareData/openwrt-ar71xx-generic-tl-wr941n-v5-squashfs-factory.bin,MD5驗證整個檔案為db062f1699c760775c5046cc303cba91
可以發現MD5是一致的~
*2015/11/04:15.05新版我已經修改好的版本:https://www.ntex.tw/ShareData/openwrt-15.05-ar71xx-generic-tl-wr941n-v5-squashfs-sysupgrade.bin,MD5驗證整個檔案為500b8f081516351f6e00cc679e153315
接著讓我們要繼續做客製化編譯,前面的步驟在每次編譯完新版本的韌體之後,都需要進行上一個步驟所述:
- 韌體前方標頭型號的替換
- MD5的重新替換
前置作業,先安裝相關編譯所需工具及套件
sudo apt-get update
sudo apt-get -y install build-essential binutils bison autoconf gettext texinfo subversion git-core libncurses5-dev zlib1g-dev gawk flex quilt libssl-dev xsltproc libxml-parser-perl unzip ncurses-term
1.首先我們要下載OWRT(OPENWRT) 12.09版本的Source回來自行編譯:
cd ~ && git clone http://git.openwrt.org/12.09/openwrt.git && cd openwrt
2.接著要把feeds.conf產生出來,也就是編譯套件的參考來源清單
cp feeds.conf.default feeds.conf
3.因為目前版本的feeds.conf內,luci套件已經搬移位置了…所以要替換掉luci的位置,並且指定該分支版本為0.11,這很重要,如果沒有做,你在接下去make menuconfig的步驟在luci裡面會只剩下applications可以選擇,且會讓整個luci邊譯不完全而無法使用(不會變磚倒是還好):
另外要注意的是xrt需要再luci上面,否則解析來源順序會導致xwrt出錯
src-svn packages svn://svn.openwrt.org/openwrt/branches/packages_12.09
src-svn xwrt http://x-wrt.googlecode.com/svn/trunk/package
src-git luci https://github.com/openwrt/luci.git;luci-0.11
#src-svn luci http://svn.luci.subsignal.org/luci/branches/luci-0.11/contrib/package
src-git routing git://github.com/openwrt-routing/packages.git;for-12.09.x
#src-svn phone svn://svn.openwrt.org/openwrt/feeds/phone
#src-svn efl svn://svn.openwrt.org/openwrt/feeds/efl
#src-svn xorg svn://svn.openwrt.org/openwrt/feeds/xorg
#src-svn desktop svn://svn.openwrt.org/openwrt/feeds/desktop
#src-svn xfce svn://svn.openwrt.org/openwrt/feeds/xfce
#src-svn lxde svn://svn.openwrt.org/openwrt/feeds/lxde
#src-link custom /usr/src/openwrt/custom-feed
4.儲存ok之後,更新一下feeds來源跟安裝所有feeds套件
./scripts/feeds update -a
./scripts/feeds install -a
5.安裝luci套件
./scripts/feeds install -a luci
完成到這個步驟之後,可以看你是要安裝openflow 1.3或者openvswitch
若為前者可以參考:http://ywang.logdown.com/posts/196787-openflow-13-for-openwrt的文章,從對應的第7步驟開始
須注意不一樣的是Target Profile: TP-LINK TL-WR841N/ND,其他都一樣,
另一個小細節須注意的是,我再用make -j 8這種多執行序make時,有時候會有錯誤導致編譯失敗…不知道為什麼,而用make V=s或者make就不會遇到,所以建議還是等久一點吧!
如果你編譯失敗,在接下來的步驟就不會看到對應的檔案生成!,可能只會看到openwrt-ar71xx-generic-vmlinux開頭的檔案…
編譯完成之後,可以在~/openwrt/bin/ar71xx/底下看到許多檔案,基本上就是不同版本+不同的壓縮方式
我們這邊要使用的是openwrt-ar71xx-generic-tl-wr841nd-v8-squashfs-sysupgrade.bin,
因為前面已經先將OWRT刷入941ND了,
若還在原廠韌體想要一口氣刷…可以用openwrt-ar71xx-generic-tl-wr841nd-v8-squashfs-factory.bin
不過記得這兩種方式都還是得修改前面文章上半部所說的韌體版本與MD5!
刷成功之後,SSH連線過去OWRT終端機後,你可以下達of開頭的指令,會有相關的內容可以操作…
另燒錄好之後,想透過okpg update更新套件列表時時會找不到來源
修改/etc/opkg.conf,將
http://downloads.openwrt.org/attitude_adjustment/12.09.1/ar71xx/generic/packages/Packages.gz
改為
http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/packages/Packages.gz
若你參考其他人文章編譯openvswitch…例如:
http://hoootony.logdown.com/posts/259102-tp-link-wr1024nd-build-openvswitch-with-openwrt (替此連結補充:可以把PKG_VERSION修改到2.3.2瞜!)
http://linton.tw/2014/05/13/openflow-13-for-openwrt-on-tl-1043nd-with-open-vswitch/
基本上很殘念的是941ND(與741ND)其FLASH大小皆為4MB…
因此是無法透過BUILD-IN編入,就算選擇PACKAGE的方式,可以看的到,但是卻無法正常運行…
所以…大家都是用1043ND不是沒有原因(被揍),這次文章有1/3的訴求沒達到,算是失敗的案例。
雖然這篇文章在主要的目的沒有達成,但還是順了一下整個OWRT的編譯流程,除此之外可以make menuconfig去看看其他有趣的套件
另外make kernel_menuconfig則可以修改kernel相關的部分,這邊就盡量懂再去碰,否則變磚的機會應該會大增…
以我第一次編openwrt沒有獲得一顆磚頭已經可喜可賀啦
最後附上本人此次嘗試過程中雜亂紀錄的hackpad:
Leave a comment
很抱歉,必須登入網站才能發佈留言。