| → 回到 downloads 或閱讀 →OpenWrt Buildroot – About |
| | 1. 不要使用 root帳號 2. 所有的命令必須在 <buildroot dir> 目錄底下執行, 如 ~/openwrt/trunk/ |
更新原始碼:
svn update
OpenWrt的原始碼很常更新。建議使用最新的原始碼。
./scripts/feeds update -a
注意: 在 ./scripts/feeds中顯示的installing 表示 “讓這個套件可以在 make menuconfig中選擇”。而不是真的編譯和安裝套件。
./scripts/feeds install <PACKAGENAME>
./scripts/feeds install -a
開始OpenWrt Buildroot的 ncurses text-based 設定界面:
make menuconfig
就像Linux kernel 設定,每一個選項大致有三種,y, m, n 分別表示:
<*> 標籤 <M> 標籤 opkg after Flashing OpenWrt) but the package will not be included in the firmware-image< > 標籤
儲存設定後, ~/openwrt/trunk/.config 會依據你所選的設定產生。
編譯環境會提供OpenWrt的 'Backfire' 10.03.1 設定檔,如 for ar71xx.
Menuconfig 提供一個文字的選單介面,可以選擇要編譯成韌體的目標、套件和一些核心選項。
make menuconfig
會自動更新現存的設定和相依性來建置更新後的映像檔。
為了簡化強大的編譯環境來產生個別的OpenWrt映像檔,發展了'menuconfig'。透過menuconfig的幫助,可以解決客製化的設定需求。依照特定的目標平台,套件需求和核心模組。標準的設定流程修改的部分包含:
目標系統的選擇可以依照你手上的設備選擇支援的平台,可以是通用或特定的設置。 選擇套件可以選'selecting all package'來選定所有的套件,但這或許在特定狀況下才可被實現。預設的套件已經足夠,或可以再選定個別的套件。要注意的是,某些套件的組合會導致建置中斷,所以要做些測試來達到預期的結果。也因此OpenWrt的開發者們只有維護最小的預設套件組合。不過feeds-script可以讓建置過程中的套件整合和維護簡單化。
最常用的三個選項:
/buildsystem/bla/bla/bla,但是ImageGenerator並不會把這個套件放到韌體的映像檔中!在開始編譯前的最後一步,離開 'menuconfig' – 這包含儲存設定或載入已存在的版本和設定。
離開文字選單並選擇 save 來儲存設定。
如果不想要標準的核心設定,你可以用:
make kernel_menuconfig
注意: make kernel_menuconfig 會修改核心設定的模版,清空 build_dir 並不會回復。
修改的部分可以參考 svn diff target/linux/ 並可以下 svn revert -R target/linux/ 來回復。
'Build system settings' 包含會影響套件位置的選項,以便於操控本地端的套件組:
第一個選項,你只需要輸入那個套件原始碼的完整的ftp或web伺服器位址。下載資料夾會一樣的放在你本地端的路徑資料夾。如果是ftp或web伺服器提供TAR封裝檔,OpenWrt的建置系統會先嘗試下載在Makefile裡描述的位址。也可以指定在建置系統上的下載資料夾。
如果你需要特定或非標準的驅動程式,必須到'Kernel modules'選定。這通常是需要USB模組或是特定的網路介面的驅動程式等。
在許多狀況,可能需要一個已被預先設定好的客製化映像檔。可以放置你的客製化檔案到
<buildroot dir>/files/
例如,你想要先設定好/etc/config/firewall,那就把修改好的firewall設定檔放到:
<buildroot dir>/files/etc/config/
例如,你的<buildroot dir> 是 /openwrt/trunk。如果你想把某些檔案放到映像檔中的/etc/config資料夾,就把這些檔案放到 /openwrt/trunk/files/etc/config.
當全部都準備好可以建置映像檔了,只要下這麼一個命令:
make
這個命令會開始一連串的活動,如你所知的
建置的程序可以透過多個非同步的程序來加速,使用 -j選項:
make -j 3
<CPU核心數目 + 1>-j選項後再編譯一次。如果你希望建置的過程中還可以使用你的系統,你可以讓建置的程序只使用閒置的 I/O 和 CPU 資源 (雙核心 CPU):
ionice -c 3 nice -n 20 make -j 2
在開發OpenWrt套件的時候,僅編譯套件是來得方便多的 (例如建置套件 cups):
make package/cups/compile V=s
如套件 mc (midnight commander)包含feed packages 的套件:
make package/feeds/packages/mc/compile V=s
注意:啟始路徑為package 目錄和 package/feeds 的或許不會和feeds的結構相同。 如套件 ~/openwrt/trunk/feeds/packages/net/snort 要用 make ~/openwrt/trunk/package/feeds/packages/snort/compile V=s來編譯。
如果因為某些原因建置錯誤了,最簡單的方式就是使用:
make V=s 2>&1 | tee build.log | grep -i error
這個命令會記錄全部的建置輸出到 /openwrt/trunk/build.log 並顯示error的部分到螢幕上。
另一個範例:
ionice -c 3 nice -n 20 make -j 2 V=s CONFIG_DEBUG_SECTION_MISMATCH=y 2>&1 | tee build.log | egrep -i '(warn|error)'
這個命令在雙核心CPU環境用背景建置並記錄全部的建置輸出到 build.log 且顯示warnings和error的部分到螢幕上。
依照你的使用的CPU,建置程序需要一些時間或更久。你可以使用 echo -e '\a'來做聲音的提示:
make V=s ; echo -e '\a'
建置成功後,最新的映像檔會放在 <buildroot dir>/bin 資料夾。編譯過的檔案會依照目的平台來放置,如韌體是給ar71xx裝置的,就會被放在 <buildroot dir>/bin/ar71xx 資料夾裡。
例:假設你的 <buildroot dir> 是 /openwrt/trunk 這個二進制檔就在 /openwrt/trunk/bin/ar71xx.
如果需要清除建置環境的時候,以下的make參數可以使用:
make clean
刪除 bin 和 build_dir 目錄內容。
make dirclean
除了刪除 /bin 和 /build_dir 的內容,並包含 /staging_dir 和 /toolchain (跨平台編譯的工具). 'Dirclean' 是基本的清除指令。
make distclean
消滅所有的已編譯的部分或設定,並刪除以下載的套件和原始碼。
注意: 請小心使用,這個命令會 移除你的建置設定(.config),toolchain和其他所有的原始碼!
在OpenWrt的建置環境中還有很多的功能,以上已包含部分的概念。
首先使用“make V=s”選項來取得更多資訊。
先檢查Makefile裡的URL路徑的結尾是否包含斜線,試著將它移除。 或是手動下載原始碼,並放到 “dl” 資料夾。
試著更新原始碼和所有的feeds (注意! 可能會導致其他問題)。 檢查是否有相關的臭蟲 (TRAC), 可以使用filter來搜尋。 或是直接在那裏回報問題,請提供套件名稱,目的CPU和映像檔等以及原始碼和套件版本。 使用 make -j ... 有時會發生不固定的錯誤。回報前請先不使用-j選項編譯。
GREP_OPTIONS 不應該有 --initial-tab 或是其他會影響輸出的選項。SED 不應該被設定。如果已存在編譯前請執行 `unset SED` 。 (參照 Ticket 10612.)./scripts/feeds install <package>
Makefile 。 cat package/feeds/packages/<package>/Makefile
找到如下:
define Package/<package>/Default
SUBMENU:=Firewall
SECTION:=net
CATEGORY:=Network
|
請確認路徑是以 package 資料夾開始,並確認資料夾存在。feeds 和 package/feeds 資料夾的結構是不一樣的。 See this.
make feeds/packages/utils/screen/compile V=smake package/feeds/packages/screen/compile V=s
執行 make menuconfig 並開啟這個套件。 把它標記為 <*> 或 <M> 讓編譯正常. See this.