建立編譯環境 (SDK for .ipk 封裝)

建立一個可以編譯 .ipk 封包的環境

在上一篇的編譯環境中,我們建立了一個 cross-compiler,可以把原生的 c code 編譯成執行檔,並在 OpenWRT 上執行。但是,這樣的環境終究不是一個標準的開發環境,無法產生可以透過 OPKG 管理的 .ipk 套件。於是,在這一篇文章中,就介紹如何建立 SDK 環境,以及產生 .ipk 的安裝套件。

建立 OpenWRT SDK

OpenWrt SDK 的建立

上一篇建立 cross-compile 環境時,說明 SDK 選項不要選擇。若是勾選該選項,則會產生一個開發環境的壓縮檔,以上一篇建立的環境 (18.06版本) 為例,會出現在 openwrt 目錄下:

bin/targets/ar71xx/generic/openwrt-sdk-ar71xx-generic_gcc-7.4.0_musl.Linux-x86_64.tar.xz

將此檔案移出並解壓縮,我們就可以得到一個完整的 SDK 開發環境,其指令如下:

此時,我們建立一個開發環境,目錄為: ~/sdk/openwrt ,接著,我們轉寫一隻簡單的 helloworld.c,放在 ~/sdk/openwrt/package/hello/src 之下。

在進行套件封裝之前,我們先在~/sdk/openwrt/package/hello/src寫一個 Makefile 來測試 helloworld.c 的執行

這裡要注意,在 Makefile 中,指令的開始要以 [tab] 開始。因此,直接複製上述文字,會執行失敗。必須手動把指令前的空白改成 [tab], 執行 make才會成功。

執行結果如下:

編譯產生 .ipk 套件

接著,我們嘗試產生一個用以產生 .ipk 套件的 Makefile,此檔案格式和 OpenWRT 系統相關,我們直接參考 OpenWRT 上的範例,並修改一下 helloworld.c 檔案所在的位置。此 Makefile 放置於 ~/sdk/openwrt/package/hello

Makefile 的格式似乎會隨 OpenWRT 版本而變? 在網路上找了一些其他人的樣板,都無法順利完成,最後找到官方的樣板才解決此問題。如果用其他版本的 OpenWRT 開發可能要注意一下。

此時,整體資料結構為:

接著,透過make menuconfig來選擇要編譯的目標:

套件在 Example 分類下,此分類可在 Makefile 中修改
將目標套件標記為M

完成後,儲存退出,接著執行: make package/hello/compile V=99 ,以下為執行結果:

編譯完成後的檔案在/sdk/openwrt/bin/packages/mips_24kc/base目錄下,我們可以看到以下的 .ipk 檔案:

在 OpenWRT 上安裝 .ipk 套件

透過 OPKG 指令,我們可以在 OpenWRT 上安裝並執行所開發的 helloworld 套件,指令如下:

同樣的,原本 OPKG 支援的指令,也可以用來查詢套件的細節:

參考資料:

Last updated