上篇說的是如何刷k3c 的OpenWrt固件,現在來說說交叉編譯的事情,也可以百度/Google “OpenWrt交叉編譯” 獲取更多內容。
編譯適用於自己平臺的軟件(k3c爲例)
不同機型由於CPU架構不同,現有的軟件可能滿足不了運行要求,目前路由器的主流的是博通的芯片,大多數基於arm/mips。arm也分armv7等等架構,架構、指令集不同,c程序通常無法運行。因爲c/c++是對底層架構敏感的,而路由器通常沒有編譯環境,這時候我們就需要在其他電腦上完成交叉編譯。交叉編譯,簡單來說就是在一個平臺上生成另一個平臺上的可執行文件。
很多熱門路由器,會有很多固件,也有很多編譯好的軟件集成在openwrt裏面,因此沒有太大必要自己編譯,這裏只針對實在找不到對應CPU架構的軟件時的情況。
下載Toolchain
熱門機型的SDK在官網有,可以查下自己的CPU架構然後去OpenWrt官網查看。
k3c沒有在官方機型裏面,不過好在有@paldier維護的SDK,裏面有構建所需的工具鏈,下面以nu-h3c爲例,解釋如何交叉編譯得到可執行文件。以下使用linux(win10 linux子系統也可以)操作
下載OpenWrt SDK
熱門機型可以查下自己的CPU架構然後去OpenWrt官網查看,K3C直接下載@paldier的git倉庫
git clone https://github.com/paldier/K3C.git
cd K3C/
./scripts/feeds update -a
./scripts/feeds install -a
make menuconfig
會出現OpenWrt Configuration的圖形界面
選擇Load->k3c256.config,然後Exit
make #會自動構建依賴、編譯固件以及相關模塊
完成後Toolchain在K3C/staging_dir/toolchain-mips_mips32_gcc-4.8-linaro_uClibc-0.9.33.2。修改環境變量:
vim ~/.bashrc
在末尾加上
export PATH=$PATH:[k3c根目錄]/K3C/staging_dir/toolchain-mips_mips32_gcc-4.8-linaro_uClibc-0.9.33.2/bin
export STAGING_DIR=[k3c根目錄]/K3C/staging_dir/
export CC=mips-openwrt-linux-uclibc-gcc
export GCC=mips-openwrt-linux-uclibc-gcc
其中[k3c根目錄]是指K3C文件夾的絕對路徑
source ~/.bashrc
編譯nu-h3c
這樣可以應對大部分沒有依賴庫的編譯工作,比如nu-h3c
git clone cd nu-k3c
make # 即可,Makefile裏寫的是$(CC),會自動找到[k3c根目錄]/K3C/staging_dir/toolchain-mips_mips32_gcc-4.8-linaro_uClibc-0.9.33.2/bin/mips-openwrt-linux-uclibc-gcc 編譯器
至此交叉編譯就完成了,scp複製文件到路由器上即可執行
打包成ipk包
如同Debian/RedHat 的包管理工具dpkg/rpm,OpenWrt也使用了一套opkg包管理工具。可以用OpenWrt SDK打包對應平臺的程序爲.ipk文件。這方面內容我瞭解也不夠深入,只能大致講一講如何簡單使用OpenWrt SDK。這裏以sysuh3c爲例,作者@zonyitoo給了完整的使用方法
按照其步驟修改,如果不清楚CPU架構,可以PKGARCHH:=all代替。以剛纔的K3C爲例:
cd K3C/
git clone [email protected]:zonyitoo/sysuh3c.git -b openwrt package/sysuh3c
vim package/sysuh3c/Makefile #PKGARCHH:=[arch] 改爲PKGARCHH:=all
然後更新feed:
cd K3C
./scripts/feeds update -a
./scripts/feeds install -a
make menuconfig
去到Utilities->選中sysuh3c 然後按M,
退出並保存,然後
make #會構建配置的模塊以及固件,所以時間很長,不過它會自己解決依賴問題,比如這個sysuh3c依賴於libc/libgcc/libuci
也可以單獨構建sysuh3c,不過就要自己解決依賴問題了
make package/sysuh3c/compile
一般生成的ipk文件在bin/文件夾下,我這裏是:
PS:這裏的Makefile是給OpenWrt SDK看的,寫法與正常Makefile不同,詳情請查閱OpenWrt官方文檔或者Google。
這次折騰交叉編譯h3c主要收穫的就是這些,如果說法有問題還請指正,畢竟這塊我瞭解的還是太少。
歡迎去我的博客參觀