OpenWrt 是一種針對 embedded system 的 Linux 發行版,軟體架構中許多元件為了微型化跟一般 Linux 系統使用的不同,有些還是特地為 OpenWrt 所開發的。另外 OpenWrt 也是編譯系統,Linux 電腦只需要安裝一些基本套件,剩下的部份會去網路上下載原始碼,包括編譯程式及每個軟體元件,然後補釘、編譯,最後產生燒錄或硬碟使用的影像檔 (image file)。
延伸閱讀可看
其它 Embedded Linux 開發系統有
一個 OpenWrt 系統由許多軟體元件組成,包括 kernel 模組、應用程式、函式庫,這些在 OpenWrt 都可以用套件編譯產生。
參考 https://wiki.openwrt.org/doc/devel/packages
每個套件會有個目錄位於 package 目錄或其子目錄下,裡面至少有一個 Makefile 檔,描述下載及編譯的步驟。Makefile 內容看起來不像一般的 Makefile,使用 OpenWrt 的模板 (template) 去除無謂的重複來達到簡化的目的,只要稍微認識一下 OpenWrt 模板,就可以容易建立或修改套件。此外,一般還會有 patches 或 files 目錄。patches 目錄放 patch 檔,讓你作修正及最佳化。files 目錄通常有預設值設定檔及執行啟動檔。
套件 Makefile 架構如下
include $(TOPDIR)/rules.mk
一些變數設定,至少要有 ...
include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/kernel.mk #如果有 kernel 模組或有用 kernel 的檔案的話
需要的定義、相依等,至少要有 Package/套件名稱 ...
一些 $(eval $(call BuildPackage,套件名稱)) 或 $(eval $(call BuildKernelPackage,名稱))
以 BuildPackage 為例,會先 eval Package/Default 產生預設的定義,再來 eval Package/套件名稱 覆蓋預設的定義,最後呼叫 Build/DefaultTargets 產生需要的編譯目標及相依,供編譯使用。
套件預設編譯目標是 compile,需要先完成其它相依
另外有編譯目標 install,需要先完成編譯目標 compile
進階套件編譯
原始碼來源相關設定
PKG_SOURCE_URL