OpenWRT編譯——從原始碼到韌體
接觸OpenWRT一年時間,大部分都在編譯韌體、刷機,遇到過不少問題。這裡記錄下以前摸索的步驟。
op編譯過程的wiki:https://wiki.openwrt.org/zh-cn/doc/howto/buildroot.exigence
以下步驟的操作環境為64位的Ubuntu16.04 LTS,路由器型號位ZBT-WA05,OP版本為CC。
注意事項:
1. 請使用一個非root使用者來完成這些工作!
2. 這裡的所有命令都在OpenWrt編譯系統的根目錄下執行(例如~/openwrt/trunk/)
3. 編譯系統的絕對路徑中不能含有空格!
4. 如果你使用root使用者下載了原始碼,請把你下載來的原始碼的所有者更改為一個非root使用者。(sudo chown -R user:user /openwrt/)
過程:
1、準備工作:安裝編譯所需的工具,在終端輸入
sudo apt-get update sudo apt-get install git-core build-essential libssl-dev libncurses5-dev unzip sudo apt-get install subversion mercurial sudo apt-get install gcc g++ binutils patch bzip2 flex bison make autoconf gettext texinfo unzip sharutils subversion libncurses5-dev ncurses-term zlib1g-dev
2、下載原始碼:需準備12GB左右的空間,原始碼體積百兆左右,但是編譯過程中會產生大量檔案,會使資料夾體積非常大
大部分SVN都是失效的,所以一些老的教程就不能參考了,這點要注意。要使用git來下載原始碼。
要下載哪個版本可以參考wiki(上面的連結)以CC版本為例,在主資料夾下執行:
git clone git://git.openwrt.org/15.05/openwrt.git
如果下載失敗,掛上VPN重試,以後可能經常遇到下載失敗的問題,VPN是一個不錯的解決方案。
3、下載安裝可用的“feeds”:上述步驟會產生一個名為openwrt的目錄,在終端輸入
等待下載完成。cd openwrt ./scripts/feeds update -a ./scripts/feeds install -a
4、配置編譯選項:
make menuconfig
用方向鍵、空格(選擇,出現M代表編譯但不編譯到韌體,*號表示編譯進韌體)、按兩下esc返回等操作來配置選項,選擇硬體平臺、CPU型號等選項。ZBT-WA05的配置如下:
選擇Package the OpenWrt-base Toolchain是為了有搭建交叉編譯環境方便,不是必選的。
此外,勾選LuCI(網頁形式的控制檯)還是非常必要的。要勾選(前面出現*號):
LuCI-->1.Collections-->luci
別忘記勾選中文:
LuCI-->2.Modules-->Translations-->Chinese(zh-cn)
最後Save,退出。
以上是基本的韌體編譯,如果需要其他功能,要再勾選或新增。
5、編譯:執行命令
make V=s -j8
V=s 代表顯示編譯資訊,一定要勾選,否則出錯的話無法看到錯誤資訊。
-j8代表使用的CPU執行緒數量,4C8T的CPU可是使用8個執行緒提高速度,使用時有時會出錯,可以改成-j1或者不加這個引數。
6、得到韌體:
顯示如下資訊時並且終端上沒有error時,代表編譯成功
Signing package index...
make[2]: Leaving directory '/home/goldmoon/openwrt'
make[1]: Leaving directory '/home/goldmoon/openwrt'
/home/goldmoon/openwrt/bin/ramips/openwrt-ramips-mt7620-zbt-wa05-squashfs-sysupgrade.bin
這個檔案就是我們想要的韌體。
編譯的時候可能會遇到形形色色的錯誤,大部分都是檔案下載錯誤(原始碼的伺服器在國外,最好自備梯子),有時候需要科學上網才行。或者網上去找到缺失的包用p2p下載軟體下載下來放到相應的位置(一般在dl這個目錄下)。至於其它錯誤,要具體情況具體對待了,我也會在以後的部落格裡記錄一下。