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』的話,就會印出所有的訊息。

results matching ""

    No results matching ""