Buildroot - 第 1 部分。一般資訊、組裝最小系統、透過選單進行配置

介紹

在本系列文章中,我想了解 buildroot 發行版建置系統並分享我自訂它的經驗。 將獲得創建具有圖形介面和最少功能的小型作業系統的實務經驗。

首先,您不應該混淆建置系統和發行版。 Buildroot 可以從提供給它的一組軟體包建立一個系統。 Buildroot 是基於 makefile 構建,因此具有巨大的自訂功能。 用另一個版本替換一個包,添加自己的包,更改構建包的規則,安裝所有包後自訂文件系統? buildroot 可以做到這一切。

在俄羅斯,使用的是buildroot,但在我看來,對於初學者來說,俄語資訊很少。

這項工作的目標是組裝一個具有即時下載、icewm 介面和瀏覽器的分發包。 目標平台是virtualbox。

為什麼要建構自己的發行版? 通常,資源有限,所需的功能也有限。 在自動化中,您更經常需要建立韌體。 透過清除不必要的軟體包並將其轉換為韌體來調整通用發行版比建立新發行版更加耗費人力。 使用 Gentoo 也有其限制。

Buildroot系統非常強大,但它不會為你做任何事。 它只能啟用並自動化組裝過程。

不考慮或比較替代建構系統(yocto、開放建置系統等)。

從哪裡獲取以及如何開始

專案網站—— buildroot.org。 您可以在這裡下載當前版本並閱讀手冊。 您可以在那裡聯繫社區,那裡有錯誤追蹤器、郵件列表和 irc 頻道。

Buildroot 為建置的目標板執行 defconfigs。 Defconfig是一個設定文件,僅儲存沒有預設值的選項。 他決定收集什麼以及如何收集。 在這種情況下,您可以單獨配置 busybox、linux-kernel、uglibc、u-boot 和 barebox bootloader 的配置,但它們都會綁定到目標板。
解壓縮下載的檔案或從 git 複製後,我們得到一個現成的 buildroot。 您可以在手冊中閱讀有關目錄結構的更多資訊;我將告訴您最重要的內容:

— 包含特定於每個板的檔案的目錄。 這些可以是用於形成系統映像(iso、sdcart、cpio 等)、覆蓋目錄、核心配置等的腳本。
CONFIGS — 主機板的實際 defconfig。 Defconfig 是不完整的板配置。 它僅存儲與預設設定不同的參數
dl — 包含下載的原始碼/彙編檔案的目錄
輸出/目標 — 產生的作業系統的組裝檔案系統。 隨後,從中建立映像以供下載/安裝
輸出/主機 - 用於組裝的主機實用程式
輸出/建構 - 組裝包

該程序集是透過 KConfig 來配置的。 相同的系統用於建立 Linux 核心。 最常用指令清單(在buildroot目錄中執行):

  • make menuconfig - 呼叫建置配置。 您也可以使用圖形介面(make nconfig、make xconfig、make gconfig)
  • make linux-menuconfig - 呼叫核心配置。
  • make clean - 清理建置結果(儲存在輸出中的所有內容)
  • make-建立一個系統。 這不會重新組裝已經組裝的流程。
  • make defconfig_name - 將設定切換到特定的 defconfig
  • make list-defconfigs - 顯示 defconfig 列表
  • make source - 只需下載安裝文件,無需建置。
  • make help - 列出可能的指令

重要說明和有用的提示

Buildroot 不會重建已經建置的套件! 因此,可能會出現需要完全重新組裝的情況。

您可以使用以下命令重建單獨的套件 使包名重建。 例如,您可以重建 Linux 核心:

make linux-rebuild

Buildroot 透過在 output/build/$packagename 目錄中建立 .stamp 檔案來儲存任何套件的狀態:

Buildroot - 第 1 部分。一般資訊、組裝最小系統、透過選單進行配置

因此,您可以重建 root-fs 和鏡像,而無需重建軟體包:

rm output/build/host-gcc-final-*/.stamp_host_installed;rm -rf output/target;find output/ -name ".stamp_target_installed" |xargs rm -rf ; make

有用的變數

buildroot 有一組變量,方便配置

  • $TOPDIR - buildroot 目錄
  • $BASEDIR - 輸出目錄
  • $HOST_DIR、$STAGING_DIR、$TARGET_DIR — 主機檔案系統、暫存檔案系統、目標檔案系統建置目錄。
  • $BUILD_DIR - 包含解壓縮和建置包的目錄

可視化

buildroot具有視覺化功能,您可以在最終系統中建立依賴關係圖、建立時間圖和套件大小圖。 結果以 pdf 檔案的形式(可以從 svn、png 中選擇)保存在 output/graph 目錄中。

可視化命令範例:

  • make graph-depends 建構依賴樹
  • make <pkg>-graph-depends 為特定套件建立依賴樹
  • BR2_GRAPH_OUT=png make graph-build 使用 PNG 輸出繪製建置時間
  • make graph-size 繪圖包大小

有用的腳本

buildroot目錄下有一個子目錄 utils的 與有用的腳本。 例如,有一個腳本可以檢查套件描述的正確性。 添加您自己的包時這可能很有用(我稍後會這樣做)。 檔案 utils/readme.txt 包含這些腳本的描述。

讓我們建立一個股票分佈

重要的是要記住,所有操作都是代表普通使用者而不是 root 執行的。
所有命令都在 buildroot 中執行。 buildroot 套件已經包含了一組用於許多常見板和虛擬化的配置。

我們來看看配置列表:

Buildroot - 第 1 部分。一般資訊、組裝最小系統、透過選單進行配置

切換到 qemu_x86_64_defconfig 配置

make qemu_x86_64_defconfig

我們開始組裝

make

建置成功完成,檢視結果:

Buildroot - 第 1 部分。一般資訊、組裝最小系統、透過選單進行配置

Buildroot 已編譯映像,您可以在 Qemu 中執行這些映像並驗證它們是否有效。

qemu-system-x86_64 -kernel output/images/bzImage -hda    output/images/rootfs.ext2 -append "root=/dev/sda rw" -s -S

結果是在 qemu 中運行的系統:

Buildroot - 第 1 部分。一般資訊、組裝最小系統、透過選單進行配置

建立您自己的板配置

新增板文件

我們來看看配置列表:

Buildroot - 第 1 部分。一般資訊、組裝最小系統、透過選單進行配置

在清單中我們看到 pc_x86_64_efi_defconfig。 我們將透過從配置中複製它來創建我們自己的板:

cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig

讓我們立即建立一個 board 目錄來儲存我們的腳本、rootfs-overlay 和其他必要的檔案:

mkdir board/my_x86_board

切換到這個defconfig:

make my_x86_board_defconfig

因此,現在建置配置(儲存在 buildroot 目錄的根目錄中的 .config 中)對應於 x86-64 Legacy(BIOS) 引導目標機器。

讓我們複製 linux-kernel 配置(稍後有用):

cp board/pc/linux.config board/my_x86_board/

透過 KConfig 設定建構參數

讓我們開始設定:

make menuconfig 

KConfig 視窗將會開啟。 可使用圖形介面進行設定(make nconfig、make xconfig、make gconfig):

Buildroot - 第 1 部分。一般資訊、組裝最小系統、透過選單進行配置

我們進入第一部分目標選項。 您可以在此處選擇要執行建置的目標架構。

Buildroot - 第 1 部分。一般資訊、組裝最小系統、透過選單進行配置

建置選項 - 這裡有各種建置設定。 您可以指定包含原始程式碼的目錄、建置執行緒的數量、下載原始碼的鏡像和其他設定。 讓我們保留預設設定。

工具鏈-建構工具本身在此處配置。 了解更多關於他的資訊。

Buildroot - 第 1 部分。一般資訊、組裝最小系統、透過選單進行配置

工具鏈類型 – 使用的工具鏈類型。 這可以是 buildroot 中內建的工具鏈,也可以是外部工具鏈(您可以指定已建置的目錄或下載的 url)。 對於不同的架構還有其他選項。 例如,對於arm,您只需選擇外部工具鏈的Linaro 版本。

C庫-C庫的選擇,整個系統的運作依賴於此。 通常使用 glibc,它支援所有可能的功能。 但對於嵌入式系統來說可能太大了,所以常常選擇uglibc或musl。 我們將選擇 glibc(稍後使用 systemd 時需要這樣做)。

內核頭檔和自訂內核頭檔系列 – 必須與組裝系統中的內核版本相符。 對於內核標頭,您也可以指定 tarball 或 git 儲存庫的路徑。

GCC 編譯器版本 – 選擇用於建置的編譯器版本
啟用 C++ 支援 – 選擇在系統中建置對 C++ 函式庫的支援。 這對我們將來很有用。

其他 gcc 選項 – 您可以設定其他編譯器選項。 我們暫時不需要它。

系統配置可讓您設定所建立系統的未來參數:

Buildroot - 第 1 部分。一般資訊、組裝最小系統、透過選單進行配置

大多數要點從標題就可以清楚看出。 我們要注意以下幾點:
使用者表的路徑 - 包含要建立的使用者的表(https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

範例文件。 將建立用戶用戶,密碼為admin,自動為gid/uid,/bin/sh shell,預設群組用戶,群組成員root,註解為Foo用戶

[alexey@alexey-pc buildroot ]$ cat board/my_x86_board/users.txt 
user -1 user -1 =admin /home/user /bin/sh root Foo user

根檔案系統覆蓋目錄 - 覆蓋在組裝的 target-fs 之上的目錄。 新增文件並取代現有文件。

建立檔案系統映像之前執行的自訂腳本 - 在將檔案系統折疊到映像之前立即執行的腳本。 我們暫時將腳本留空。

讓我們進入內核部分

Buildroot - 第 1 部分。一般資訊、組裝最小系統、透過選單進行配置

內核設定在這裡設定。 核心本身是透過 make linux-menuconfig 配置的。
您可以透過不同的方式設定內核版本:從提供的版本中進行選擇、手動輸入版本、指定儲存庫或現成的 tarball。

內核配置 — 內核配置的路徑。 您可以為所選架構選擇預設配置,也可以從 Linux 中選擇 defocnfig。 Linux 來源包含一組針對不同目標系統的 defconfig。 您可以找到您需要的 直接查看這裡的來源。 例如,對於小獵犬骨黑板,您可以 選擇配置.

目標包部分可讓您選擇將在正在建置的系統上安裝哪些套件。 我們暫時保持不變。 稍後我們會將我們的套件添加到此列表中。
檔案系統映像 - 將收集的檔案系統映像的清單。 新增 iso 映像

Buildroot - 第 1 部分。一般資訊、組裝最小系統、透過選單進行配置

引導程式 - 選擇要收集的引導程式。 我們選擇isolinix

Buildroot - 第 1 部分。一般資訊、組裝最小系統、透過選單進行配置

配置Systemd

Systemd 正與核心和 glibc 一起成為 Linux 的支柱之一。 因此,我將其設定移至單獨的項目。

透過 make menuconfig 配置,然後目標套件 → 系統工具 → systemd。 在這裡您可以指定係統啟動時將安裝和啟動哪些systemd服務。

Buildroot - 第 1 部分。一般資訊、組裝最小系統、透過選單進行配置

儲存系統配置

我們透過 KConfig 儲存此配置。

然後儲存我們的defconfig:

make savedefconfig

Linux核心配置

使用以下命令呼叫 Linux 核心配置:

make linux-menuconfig

讓我們加入對 Virtualbox 顯示卡的支持

Buildroot - 第 1 部分。一般資訊、組裝最小系統、透過選單進行配置

讓我們加入 Virtualbox Guest 整合支持

Buildroot - 第 1 部分。一般資訊、組裝最小系統、透過選單進行配置

儲存並退出。 重要信息:設定會保存在output/build/linux-$version/config中,但不會儲存在board/my_x86_board/linux.config中

Buildroot - 第 1 部分。一般資訊、組裝最小系統、透過選單進行配置

因此,您需要手動將配置複製到儲存位置:

cp output/build/linux-4.19.25/.config board/my_x86_board/linux.config

之後我們將對整個系統進行完整的重新組裝。 buildroot 不會重建已經建置的內容,您必須手動指定用於重建的套件。 為了不浪費時間和精力,完全重建一個小系統會比較容易):

make clean;make

建置完成後,從 CD 啟動 VirtualBox(在版本 5.2 和 6.0 上測試)。系統參數:

Buildroot - 第 1 部分。一般資訊、組裝最小系統、透過選單進行配置

從組裝的 iso 運行:

Buildroot - 第 1 部分。一般資訊、組裝最小系統、透過選單進行配置

使用材料清單

  1. 建構根目錄手冊

來源: www.habr.com

添加評論