Source and Build Tree
下載所有套件
buildroot的所有套件, sources都是建置之前才會從網路上下載下來,所以第一次build會很久,因為包含下載,所以這邊我們先來研究一下,他下載了多少東西,請下指令:
make help
發現裏面有個指令是:
source - download all sources needed for offline-build
下這個指令前記得先建立組態:
make raspberrypi3_defconfig
然後用以下make target:
make source
你就會發現系統已經開始在下載待回會用到的所有套件。
套件說明
總共下載了20個套件,下載完的套件都放在資料夾「dl」裏面:
底下介紹一下每個套件大概的用途:
- gcc - 內容是GNU compiler collection, 其中包含了C 和 C++編譯器。
- binutils - 包含了連結器(Linker),組譯器(assembler),和其他處理物件檔案的工具。
- gmp - 這個套件包含了一些多精度數值運算的函式庫,建立GCC需要用到。
- mpc - 也是包含一些多精度運算的函式庫,建立GCC需要用到。
- mpfr - 內容是多精度數值運算的函數。
- linux-header - 由linux kernel API所匯出的表頭檔,是要給Glibc用的。
以上6個套件都是用來建立Cross-Compiler的,和Glibc的關聯性如下圖所表示:
如果想要自行建立cross-compiler的,可以參考我的另一篇文章『How to Build a GCC Cross-Compiler』。
其餘套件:
- m4 - 裏面包含了巨集處理器(macro processor)。
- uClibc-ng - 是一種C的library,一般來說都是用Glibc,但是這邊選用uClibc,因為他比較小,也支援沒有MMU的架構,非常適合比較小的系統(< 10 MB)。
- kmod - 包含了讀取kernel module的函式庫和程式。
- pkgconf - 在設定組態或者在make 專案時,這個套件會傳遞一些include和library的路徑給建置的軟體。
- busybox - Busybox在單一的可執行文件中提供了精簡的Unix工作集,可運行於多款POSIX環境得的操作系統。
- dosfstools - 可以讓使用者在GNU/Linux OS上很快速的建立,設立標籤和檢查MS-DOS FAT 的檔案格式(mkfs.fat, fsck.fat and fatlabel)。
- e2fsprogs - 裏面有處理ext2 檔案系統的程式。當然他也支援ext3和ext4。
- genext2fs - 這個程式可以讓你建立ext2的檔案系統。
- genimage - 可從一個root filesystem裏面建立多種檔案系統和flash image。
- confuse - libcoufuse提供了一些組態分析函式庫。
- flex - 裏面的套件可以產生可辨識文字pattern的程式(反正就是正規表示法那些東西)。
- mtools - 是一套允許讓Unix系統去操控MS-DOS格式上的檔案操作,像是讀寫檔,和移動檔案等等。
- rpi-firmware - Raspberry pi官方release出來的軔體。
- fakeroot - 可用來模擬root的權限去做一些操作。
開始建制
剛剛組態已經產生,sources也已經下載好了,接下來就開始建制,buildroot是不需要以root去執行的,因為系統已經被設計成普通使用者也可以執行:
make 2>&1 | tee build.log
過程中所有的套件都會解壓縮在『buildroot/output/build』,並且建置。
所有的結果都會在『buildroot/output/images』裏面。
裡面幾個比較重要的檔案:
- root filesystem 映像檔,其有兩種格式: 『ext2』和『ext4』。
- kernel 映像檔。
- 一個或以上的DTB (Device Tree Blobs)。
- bootloader 映像檔。
- Raspberry Pi3的firmware 映像檔。
其中,
sdcard.img算是整個結果的映像檔,
假設你的sdcard所在的位置是 『/dev/sdd』,
你只要下指令:
sudo dd if=sdcard.img of=/dev/sdd
然後在把sdcard卡插進去pi3裏面,就可以開機了。
其他相關指令:
雖然大部分的make target都要看作者開放哪些功能,但是有幾個make target通常都會存在於每個系統中:
make clean
清除所有建制過程中還是已經建制完的檔案,唯獨保留組態檔。
make distclean
清除所有檔案,包含組態檔,還有已經下載完的檔案。
make V=1
這個編譯選項的V是代表『Verbose』,在編譯過程會有許多的資訊,所以預設是使用『V=0』,代表安靜編譯模式,只列出重要訊息(但是還是很多訊息就對了=.=),所以如果指定『V=1』的話,就會印出所有的訊息。