前言
繼先前建立好基楚的系統後,我們已經加入了 meta-bootlinlabs Layer。 本文會接續之前建立的環境,開始加入自訂的 Machine。
主要內容
BSP Layer
BSP Layer 是 Layer 的一種,它通常會包含目標機器的硬體配置、Bootloader、Kernel、Display Support。常以 meta-<bsp-name>
命名,裡面會有 machnes 資料夾。
如果我們想知道該 BSP Layer 它支援了哪些機器,我們可以在該 Layer 中,觀察它的 conf/machine/*.conf。
目標機器的配置檔會以 MACHINE.conf
命名。
但更好的方式是,該 BSP Layer 有完善的 README,讓我們可以直接參考。
Machine 常見的配置項
- TARGET_ARCH 該機器的硬體架構,例: arm, aarch64
- PREFERRED_PROVIDER_virtual/kernel 預設使用的 Kernel
- MACHINE_FEATURES 提供的硬體特性清單,例: usbgadget, usbhost, screen, wifi, bluetooth
- SERIAL_CONSOLES 要使用的序列埠與通訊速度,它會被傳給Kernel 做為 console 的參數。例: 115200;ttyS0
- KERNEL_IMAGETYPE 要編譯的映像檔種類,例: zImage, uImage
Bootloader 常見的配置項
- SPL_BINARY 如果有 SPL (Secondary Program Loader),指定此 SPL 的名稱。預設是空字串。
- UBOOT_SUFFIX UBOOT的後綴,例: img。預設是 bin。
- UBOOT_MACHINE 目前機器所使用的配置檔。
- UBOOT_ENTRYPOINT Bootloader 的進入點。例: 0xC0800000
- UBOOT_LOADADDRESS Bootloader 載入位置。
- UBOOT_MAKE_TARGET Makefile 的目標,預設是 all
Kernel 常見的配置項
Kernel 的配置也會撰寫在 <machine>.conf
中
- PREFERRED_PROVIDER_virtual/kernel 指定要使用的 Kerenl Package
- PREFERRED_VERSION_linux-yocto = “5.10%” 指定要使用的版本
- SRC_URL
必須提供 Kernel 配置檔,並命名為 defconfig。
SRC_URL += "file://defconfig \ file://nand-support.cfg \ file://ethernet-support.cfg \ "
Kernel Metadata 常見的配置項
- LINUX_KERNEL_TYPE
- standard (預設)
- tiny
- preempt-rt
- KERNEL_FEATURES 提供的 Kernel 特性清單
資料夾結構
- bsp/
- cfg/
- features/
例: features/smp.scc
KERNEL_FEATURES += “features/smp.scc”
1 2 3
define KFEATURE_DESCRIPTION "Enable SMP" kconf hardware smp.cfg patch smp-support.patch
- ktypes/
- patches/
調整 Kernel 配置
調整 Kernel 配置時,我們可以以提供 defconfig 的方式進行。或是提供 Configure Fragments 進行調整。
- 提供 defconfig
1 2 3 4 5 6 7 8 9 10
# 配置 Kernel bitbake -c kernel_configme linux-yocto # 手動調整 Kernel 選項 bitbake -c menuconfig linux-yocto # 產生 .config bitbake -c savedefconfig linux-yocto # 我們再自行將 .confg 存為 defconfig
- 提供 Configure Fragments
1 2 3 4 5 6 7 8 9 10 11
# 配置 Kernel bitbake -c kernel_configme linux-yocto # 手動調整 Kernel 選項 bitbake -c menuconfig linux-yocto # 產生 Configure Fragments bitbake -c diffconfig linux-yocto # 確認 Configure Fragments 是否有正確被套用 bitbake -c kernel_configcheck -f linux-yocto
建立 bootlinlabs Machine
我們可以參考 meta-st-stm32mp/conf/machine 的配置進行 bootlinlabs Machine 的建立。
|
|
修改 conf/local.conf 內的 MACHINE,並重新編譯。
|
|
我們可以在 ${BUILDDIR}/tmp/deploy/images/**bootlinlabs**/
看到我們所建立的新 Machine。
|
|
Distro Layer
通常 Distro Layer 會包含 Libc,initialization script, splash screen, … 等, 相關的配置會記錄在 conf/distro/<distro>.conf
中。
在 <distro>.conf
中必須包含 DISTRO
變數。例:
|
|
小結
本次實做的部份比較少,重心主要放在瞭解 machine,distro 的配置。