Download infrastructure
Buildroot方便的其中一個功能就是,所有要建置或是需要用到的原件,都可以從其他地方自動下載,不管是source code或是binary,都可以透過設定,然後系統會自動幫你下載,目前提供了下載方式有以下:
- bazaar
- cvs
- git
- mercurial
- rsync
- scp
- subversion
Download location
每個套件的下載細節都會在『$(TOPDIR)/package/<packageName>/*.mk』裡面,這部分可以是一個tarball,多個patch,或者是binary等等。
eg.
以套件『xz』來看,路徑就位於『buildroot/package/xz/xz.mk』,
每當要下載一個套件時,buildroot都會嘗試用底下的優先權來下載:
- $(DL_DIR):
系統會先看之前下載的資料夾中有沒有這個套件,有就不用下載了。 Primary site:
預設是空的,如果你很常用buildroot來建置專案的話,你可以在local建置一個package Repo server,然後將這個primary site的URL設定成它,這樣會減少很多網路流量。這部分的修改請參考『.config』如下:original site:
在剛剛說的每個套件的『.mk』檔裡面,如果以定義原始套件的網站『XZ_SITE』的話,這邊會從原生的網站上下載,記得要把所有的資訊都填完整,像是套件名稱-『XZ_SOURCE』,套件版本-『XZ_VERSION』等等。
- backup site: 有時候有些狀況,會造成你無法存取官方的repo,所以這邊可以設定一個備用的。如剛才『Primary site』的圖所示,有一個『BR2_BACKUP_SITE』的值,這邊可以控制這個備用Repo的位址。預設是『http://sources.buildroot.net 』,這個Repo是由buildroot社群所維護的,通常都是在Release之前會把所有的套件都更新到這邊來。不過對於kernel和bootloader版本非常多,一直在更新的套件來說,在這個Repo不可能會有全部的版本,這邊要特別在注意一下。
DL_DIR
一但套件被下載以後,buildroot都會放在$(DL_DIR)裡面,預設是在『$(TOPDIR)/dl』裡面,這部分的設定,可以看一下『.config』裡面的BR2_DL_DIR:
又或者是你可以用環境變數的方式的傳遞這個參數,原本的設定會被這個環境變數蓋掉:
export BR2_DL_DIR=/path
這些套件在buildroot裡面支援平行建置(parallel build)的方式,假設我開了兩個『out of tree』專案,開了兩個terminal同時去build的話,不會互相干涉。
Download-related make targets
就像前幾章有說過,可以在專案建置前將所有的套件先下載下來,底下三個就是類似的target:
make source
將所有的套件下載到$(DL_DIR)底下,這樣就可以離線建置。
make external-deps
列出在$(DL_DIR)裡面被這個專案建置需要的套件,如果沒有所有檔案都在這個資料夾的話,那就必須要執行一次『make source』。
make source-check
跟『make source』相比,這個target可以先檢查待回會用到的套件源頭(upstream),看是否連線正常,還有沒有這個檔案。