wr720n v4 折騰筆記(五):終篇-編譯安裝openwrt附帶njit
前言:
由於沒有多余的U盤,所以想直接壓縮生成一個帶njit-client的openwrt固件。其中按照網上的教程走,遇到了一些問題,這裏前面的步驟來源於網絡。後面給出處理問題的方法。
一、準備工作
- 準備一臺運行Linux或者類Unix操作系統的PC,比如Ubuntu,Debian,Fedora,MAC OS,FreeBSD,Suse等。下文所列出命令都Ubuntu 16.04下的命令,其他linux發行版請到這裏查看相關的命令。
- 需要大約350MB硬盤空間,用於下載軟件包(當然,選擇編譯的軟件越多,需要下載的源代碼包就越多,可能需要多達幾個G的硬盤空間)。
- 需要6~8GB可用硬盤空間,用於編譯OpenWrt。
- 一般情況下,我們還需要一個非root用戶。
- 最後是耐心和時間,OpenWrt邊下載邊編譯,編譯幾個小時那是家常便飯,並且中間還有可能出錯。
二、編譯openwrt
1.安裝 git 以獲取源代碼:
在終端中運行:
1 2 | sudo apt-get update sudo apt-get install git-core |
2.安裝必要的編譯工具:
1 |
sudo apt-get install libtool autoconf automake gcc-multilib bison screen gcc g++ binutils patch bzip2 flex make gettext unzip libc6 git-core git build-essential libncurses5-dev zlib1g-dev gawk quilt asciidoc libz-dev subversion |
3.下載openwrt源代碼,這裏我下載的是trunk (main development tree) :
1 | git clone git://git.openwrt.org/openwrt.git |
如果想下載Barrier Breaker 14.07 分支,就這樣:
1 | git clone git://git.openwrt.org/14.07/openwrt.git |
4.更新下載和安裝擴展軟件包:
假設你的工作目錄為openwrt,進入openwrt目錄:
1 |
cd openwrt |
然後把feeds.conf.default復制一份命名為feeds.conf:
1 | cp feeds.conf.default feeds.conf |
(添加njit-client的源)打開feeds.conf,在最後加上一行
1 | src-svn njit https://github.com/liuqun/openwrt-clients/trunk/njit |
然後是更新下載擴展軟件包,並安裝它們到package/feeds/目錄:
1 2 | ./scripts/feeds update -a ./scripts/feeds install -a |
5.配置openwrt
現在開始配置OpenWrt,選擇你需要目標平臺,以及選擇將要編譯和添加進固件的軟件包。運行命令:
1 | make menuconfig |
若回顯提示缺少軟件包或編譯庫等依賴,則按提示安裝所缺軟件包或庫等即可。
然後你就來到了這個界面:
這個配置界面跟Linux內核的配置界面基本差不多,幾乎每一項都有3個選擇Y/M/N:
- Y:選擇Y,該軟件將被編譯,並且加入到你的目標固件裏;
- M:選擇M,該軟件包將會被編譯,但不會被放入固件裏。在需要它的時候,可以用OPKG軟件包管理器進行安裝;
- N:選擇N,該軟件包將不會被編譯,也不會被安裝進固件。
- /:搜索軟件包。
- 方向鍵是移動光標
- 回車鍵是確認
- 空格鍵是選擇,可以代替Y/M/N鍵的使用
例如我用的型號是D-LINK DIR-615 D4,到第一幅圖Support Hardware那裏查詢對應的Target和Platform,查到之後選擇對應的Target System和Subtarget和Target Profile,我選的是Ralink RT28XX/3XXX和RT305X和對應的Profile。
又例如你是TP-LINK TL-MR3420,就這樣選:
1 2 | Target System ---> (X) Atheros AR71xx/AR7240/AR913x Target Profile ---> (X) TP-LINK TL-MR3420 v1 |
之後就是選擇擴展軟件包,按需要添加。
- 添加LuCI(這樣才自帶網頁GUI端):LuCI ->Collections -> <*> luci(就是找到luci然後按一下Y)
- 添加LuCI的中文語言包:LuCI ->Translations -> <*> luci-i18n-chinese
- 添加UTF8編碼:Kernel modules -> Native Language Support -> <*> kmod-nls-utf8
- 添加njit-client:Network -> <*> njit8021xclient
- 下面的njit8021xclient-web也順便選了吧,這個是一個簡單的LuCI的配置界面
其他的軟件包就按需要添加吧,註意不要太多(我可憐的4M ROM…),不然編譯到最後會提示文件太大無法創建。
好了,選完之後回到主菜單,選Exit退出並保存,回到終端。
(不裝njit-client可忽略)如果你的系統是Ubuntu,那麽在編譯之前建議執行此操作
1 | sudo mv /usr/bin/pcap-config /usr/bin/pcap-config.bak |
總之就是幹掉pcap-config,否則編譯會出錯,就像這樣:
auth.c: In function ‘SendResponseIdentity’:
auth.c:432:11: error: invalid ‘asm’: invalid use of ‘%w’
當時編譯出錯了真是折騰了好久,最後終於在這裏看到了njit-client作者的解答。
然後把默認的無線開啟,這樣刷機之後方便許多。打開package/kernel/mac80211/files/lib/wifi/mac80211.sh,將
1 | option disabled 1 |
的1改為0,編譯出來就默認打開wifi了。
下面的encryption也可以改下,不改就是默認沒密碼。
要改的話,把none改為psk2,再加一行option key yourpassword即可。
之後就是開始編譯了:執行
1 | make V=s |
其中“V=s”表示輸出詳細的debug信息,也可以直接執行make。
編譯完成之後,在 /openwrt/bin/ 下就會生成刷機用的.bin文件,在packages/下有軟件包的.ipk文件。刷機方法就請自行百度了。
刷完之後重啟路由,把電腦本地連接的ip改為192.168.1.x,然後在瀏覽器中進入192.168.1.1就進入LuCI了。沒有LuCI的就telnet 192.168.1.1自行配置吧。然後在瀏覽器裏設置一些東西,例如剛進去就要改密碼、改WAN口的IP(學校給的)、DNS、網關(學校給的)、MAC地址(如果校園網綁定了MAC)、設置DHCP服務(設完之後可以把本地連接的手動ip改回自動獲取,DNS好像要用學校給的DNS)什麽的,慢慢做吧。
測試一下njit-client吧!在putty終端中執行
1 | njit-client [username] [password] [interface] & #改成自己的用戶名和密碼,接口必須對應 |
試試吧!其中[interface]是接口,例如eth0,eth1,總之要對應你的WAN口,在luci裏就可以查看,例如我就是eth0.2,ar71xx的多數是eth1。
能連接上之後就做一個開機啟動腳本吧~在路由器的 /etc/init.d/ 目錄下建立一個自動運行腳本 njitclient,內容如下:
1 2 3 4 5 6 7 8 9 10 11 12 | #!/bin/sh /etc/rc.common #(c) 2010 ivan_wl START=50 start() { njit-client [yourusername] [yourpassword] [interface] & #這裏自己改一下 } stop() { killall njit-client killall udhcpc } |
之後運行命令
1 2 | chmod +x /etc/init.d/njitclient #加上可執行屬性 /etc/init.d/njitclient enable #開啟開機自動運行 |
後記
我按照這個教程並沒有成功,其中在編譯的時候總是出現patch失敗。
因此我直接手動打patch,同時把patch刪掉。
最終的patch後的njit文件可以在這裏下載:
http://download.csdn.net/download/vspiders/10002510
下載之後,替換掉dl文件夾裏面的njit包,然後刪掉feeds/njit/njit8021xclient/patch文件,正常編譯即可。
這裏附上最終生成的固件:
openwrt-ar71xx-generic-tl-wr720n-v4-squashfs-sysupgrade.bin
wr720n v4 折騰筆記(五):終篇-編譯安裝openwrt附帶njit