建立編譯環境 (Cross Compiler)
建立基本的 OpenWRT 程式編譯環境
Last updated
建立基本的 OpenWRT 程式編譯環境
Last updated
為了在 OpenWRT 上執行所設計的程式,我們需要建立 cross-compiler (toolchain) 來進行程式的編譯,為了建立此環境,我們選用 Ubuntu 12.04 以及 Ubuntu 16.04 作為 VM 的作業系統,並按照官網的步驟,建立 cross-compiler 的環境。詳細的步驟可以參考:
(1) 在安裝好 Ubuntu 的 VM 上,一開始先取消 SED 的功能
(2) 安裝需要的程式
(3) 下載 OpenWRT 的環境。對於 AR300M 而言,這裡相對應的版本為15.05 branch (Chaos Calmer)。要注意的是,由於 Chaos Calmer 已不在主專案 (openwrt.git) 中, 的指令是錯誤的。
對於 AR750S,要下載 18.06 版的 OpenWRT,指令如下:
由於一開始此操作文件是對 AR300M 製作,所以會以 Chaos Calmer 的版本為主。對於 AR750S 而言 (18.06),以下提及 chaos_clamer 的資料夾都會變成 openwrt,此資料夾的名稱和GIT專案中名稱一致。
(4) 透過 git 取得 OpenWRT 的資料後,會產生一個相對應的資料夾 (chaos_calmer),在此,先更新 OpenWRT 的對應檔案:
(5) 接著,開始安裝 (make) 的準備
這邊檢查了一下使用的晶片和 WiFi AP 所使用的晶片是否一致。在 OpenWRT 下查詢晶片內容的方法為: cat /proc/cpuinfo,透過指令,以AR-750S為例,我們可以看到如下的硬體資訊列表:
在系統資訊中,最重要的就是晶片組的資訊,AR-750S使用沒 Qualcomm QCA956X 的晶片,此處的規格必須和上述 menuconfig 的 Target System 設定一致。
記得在 Build the OpenWrt SDK 的選項不要包含,此介面也可以用以編輯燒錄時要使用的 OpenWRT 映像檔,不過目前並未測試此功能。
(6) 執行 OpenWRT 的安裝,耗時數小時,安裝好占約 3GB 的硬碟空間 (chaos calmer)
此指會依序安裝不同的功能,安裝完後會顯示以下資訊:
(7) 完成後,cross-compiler 已經完成。在執行編譯前,我們需要預先宣告編譯環境,將 cross compiler 所在的資料夾加入 PATH 環境變數,將環境變數 STAGING_DIR 定義為資料夾 staging_dir 的所在路徑。指令如下:
(8) 設定完成之後,在任意資料夾輸入 mips 之後,按兩下 TAB 鍵,應該會出現各種 cross-compiler,如下圖顯示:
(9) 進行 hello_world 的簡單測試
編譯好的 hello_world 不能在 Ubuntu 上執行,但是可以在 OpenWRT 系統上執行。透過 winscp,我們可以將編譯好的檔案移到 OpenWRT 平台上執行,結果顯示於下圖中。
透過make menuconfig
我們可以設定要額外編譯的 package,以 libnl-3 為例,我們可以從 Libraries 進入,並把相對應的 libnl package 勾選 (如下圖所示), 之後,再進行make
。
完成make
之後,相對應的 package 出現於build_dir
底下 (如下圖),其中,要引入的 header 檔位於include
的資料夾內。
另一方面,編譯好的 .o/.a 檔則位於staging_dir
資料夾中的usr/lib
之下,透過取得 header 檔以及 .o/.a 檔的位置,我們就可以在進行 openwrt 程式開發時,引入額外的 package,進行較複雜的程式編譯。
考慮到版本問題,有時候我們也需要從 source code 開始進行編譯,相同的這樣的過程需要透過 cross compile 進行,我們以 openssl-1.0.2 為例進行說明。
一開始,先下載相對應的程式碼,並解壓縮:
接著,把檔案移到staging_dir
底下
進入openssl-1.0.2g
資料夾下,並對其 config 檔進行設定:
其中,設定包含以下內容:
shared: 產生 .so 的動態函式庫
no-asm: 取消 asm 功能
setarch i386: 在 32 bit 環境下進行編譯
--cross-compile-prefix=mips-openwrt-linux- 使用 cross-compile 進行編譯
完成後,執行make
,執行後應會產生檔案如下圖所示:
使用file
檢查所產生的libssl.so.1.0.0.
可以看到,所產生的函示庫支援 mips 架構 (openwrt CPU 的計算架構)。若需要使用可以直接連接 .a 檔 (靜態函式庫),進行程式的開發。
來源:
Winscp 提供 Linux 和 Windows 之間的檔案傳送的圖形化介面,使用上只需要填入 IP 以及 port (通常為22),就可以透過圖形化介面傳輸檔案。請參考:
考慮到 Linux 和 Windows 系統的差別,執行的權限會在搬移檔案後需要設定。最簡單的方法就是使用 # chmod 777 filename
,直接賦予檔案執行的權限。若是想要知道關於執行權限的設定,可以參考: