.ipk
文件
.ipk
文件是可以通過 OpenWrt 的包管理軟件 opkg
直接安裝,好比 .deb
文件與 apt
的關系。雖然官方的軟件倉庫已經很豐富了,但是有時仍然需要從源碼編譯一些第三方的軟件使用,例如銳捷認證等
但是由於路由器平台通常與常用的服務器或者個人 PC 的處理器架構不同,並且路由器的處理器本身性能較弱,幾乎不可能直接在路由器上進行編譯生成 .ipk
文件,因此需要交叉編譯來實現
而官方的 OpenWrt 倉庫就提供了一個方便使用的交叉編譯環境
編譯准備
以 Debian / Ubuntu 為例,參考官網給出的要求,可以通過下面命令來進行安裝依賴包
sudo apt update
sudo apt install build-essential ccache ecj fastjar file g++ gawk \
gettext git java-propose-classpath libelf-dev libncurses5-dev \
libncursesw5-dev libssl-dev python python2.7-dev python3 unzip wget \
python3-distutils python3-setuptools python3-dev rsync subversion \
swig time xsltproc zlib1g-dev
安裝/更新好這些依賴之后,就可以通過 git
拉取 OpenWrt 倉庫了
git clone https://git.openwrt.org/openwrt/openwrt.git
通常由於倉庫較大以及網速問題,可能會需要很久,其實可以通過 --depth
來限制拉取的倉庫深度,或者通過鏡像站來加速拉取,當然也可以兩者同時采用
git clone https://git.openwrt.org/openwrt/openwrt.git --depth=1
# cnpmjs.org 已經不能使用,請自行尋找其他鏡像站
# git clone https://git.openwrt.org.cnpmjs.org/openwrt/openwrt.git
# git clone https://git.openwrt.org.cnpmjs.org/openwrt/openwrt.git --depth=1
編譯 .ipk
文件
更新 feeds
進入 openwrt 倉庫后,首先需要更新軟件包列表 feeds
,它是在 OpenWrt 中共用位置的包的集合。運行以下命令即可更新內置軟件包列表並鏈接到編譯工具中:
cd openwrt/
./scripts/feeds update
./scripts/feeds install
配置平台
make menuconfig
通常使用圖形化菜單界面來進行配置編譯選項,依次配置處理器架構、具體的處理器型號以及設備
以小米 mini 路由器為例,應該將他們配置成如下圖所示
獲取交叉編譯鏈
這一步就是獲取對應設備交叉編譯所需的編譯鏈
make tools/install V=s -j$(grep processor /proc/cpuinfo | wc -l)
make toolchain/install V=s -j$(grep processor /proc/cpuinfo | wc -l)
V=s
可以顯示make
過程中的所有輸出,方便定位當前是否卡在了某一步驟上-j$(grep processor /proc/cpuinfo | wc -l)
則是根據機器的 CPU 數量來進行多線程編譯
添加需要編譯的第三方軟件包
可以先搜索有沒有已經配置好的含有 Makefile
的倉庫,有了適配過的 Makefile
文件就可以很方便的來編譯源碼生成 .ipk
文件了
以 minieap
為例,github 上有已經完成的倉庫,依次可以直接拉取來編譯
git clone https://github.com/BoringCat/minieap-openwrt.git package/minieap
在拉取完成倉庫后,就可以再次配置編譯選項,將需要編譯成 .ipk
的功能配置成模塊編譯,也就是標記成 M
make menuconfig
對於 minieap
來說,在 Network
找到對應選項並配置成 M
即可,如下圖
配置完成后就可以進行編譯了,編譯命令也很簡單,以 minieap
為例如下所示
make package/minieap/compile V=s -j$(grep processor /proc/cpuinfo | wc -l)
編譯完成后,.ipk
文件會生成在 ./bin/packages/<YourArchitecture>/base
目錄下,將其拷貝到路由器上就可以通過 opkg
進行安裝使用了
參考資料
- 【OpenWrt】編譯系統准備
- 【Gitbook】建立編譯環境
- 【Github】OpenWrt
- 【Github】MentoHUST-OpenWrt-ipk
- 【Github】minieap-openwrt
本文作者: ywang_wnlo
本文鏈接: https://ywang-wnlo.github.io/posts/96a1807.html
版權聲明: 本博客所有文章除特別聲明外,均采用 BY-NC-SA 許可協議。轉載請注明出處!