Yocto Linux BSP7 新版本介紹
簡介
Toradex 已經(jīng)發(fā)布了適用于 Verdin/Apalis/Colibri 模塊系列的 Linux BSP 7 版本,Yocto Project 升級到 scarthgap LTS 版本。文章將介紹新版本中的一些新特性和需要注意的地方,以及各類模塊上 mainline/downstream 支持情況。
BSP 支持周期
Toradex 的 BSP 通常在發(fā)布后的第四年,該 BSP 進(jìn)入 EOL 狀態(tài)。中間會經(jīng)歷活躍的開發(fā)階段和維護(hù)期階段。伴隨著 BSP 7 發(fā)布,在 2022 年發(fā)布的 BSP 6 相應(yīng)進(jìn)入了維護(hù)階段,會根據(jù)需要不定期發(fā)布 BSP 6 的維護(hù)版本。而 BSP 7 則每個(gè)季度定期發(fā)布一個(gè)季度穩(wěn)定版本,該版本可用于產(chǎn)品開發(fā)和量產(chǎn)用途。
對于不同版本的選擇,如果是新項(xiàng)目開發(fā),建議使用最新的月度或者季度發(fā)布,從而獲得最長期的軟件支持。季度發(fā)布經(jīng)過 Toradex 更加詳細(xì)的測試和審核,可用于量產(chǎn)。對已有的項(xiàng)目,可以優(yōu)先繼續(xù)使用原來的 BSP。Toradex 發(fā)布的軟件和硬件,往往會盡最大努力保持兼容性。
mainline/downstream 支持
自從 BSP 5 開始,Toradex 已經(jīng)開始在部分 Arm 模塊上提供了 mainline 的支持。在最新的 BSP 7 中,所有 Arm 32 位處理器的模塊均在使用了 mainline,這包括 Apalis iMX6、Colibri iMX6、Colibri iMX7、Colibri iMX6ULL,Verdin iMX8M Mini 在 BSP 7 上也正式提供 mainline 支持。其余的模塊如 Apalis iMX8、Colibri iMX8X、Verdin iMX8MP、Verdin AM62 則繼續(xù)使用來自 NXP 或者 TI 的 downstream 系統(tǒng)。Verdin iMX8MP 上除了 downstream 系統(tǒng),還可以使用實(shí)驗(yàn)性的 upstream 系統(tǒng)。
BSP 7 新特性
下面是 BSP 7 中一些主要的更新和變化,可能和之前的 BSP 版本使用習(xí)慣會有所不同,在遷移到 BSP 7 需要注意。詳細(xì)的變更說明請參考image issue tracker。
移除 X11 distro
在 BSP 7 已經(jīng)不再支持基于 X11 的發(fā)布版本,但是在使用 wayland 的發(fā)布版本中默認(rèn)包含的 xwayland 組件依舊提供對于依賴 X11 的應(yīng)用支持。
Kernel config
在之前的 BSP 版本中,kernel config 采用內(nèi)核源碼中 toradex_defconfig 文件。例如 BSP 6 中 Verdin iMX8MP 內(nèi)核 recipe linux-toradex_5.15-2.2.x.bb中 KBUILD_DEFCONFIG使用 toradex_defconfig。直接在內(nèi)核源碼中類似地使用 make toradex_defconfig命令進(jìn)行配置。
KBUILD_DEFCONFIG:mx8-nxp-bsp ?= "toradex_defconfig"
從 BSP 7 開始,Toradex 采用 Yocto Project 中 configuration fragments方式配置內(nèi)核。BSP 7 中 Verdin iMX8MP 內(nèi)核 recipe linux-toradex_6.6-2.1.x.bb的 SRC_URI包含了 KCONFIG_REPO,而不再使用之前的 toradex_defconfig。
SRC_URI = " \ git://git.toradex.com/linux-toradex.git;protocol=https;\ branch=${SRCBRANCH};name=machine \ ${KCONFIG_REPO};protocol=https;type=kmeta;name=meta-toradex-bsp;\ branch=main;destsuffix=${KMETA} \ file://nxp-imx.cfg \ "
KCONFIG_REPO = "git://git.toradex.com/linux-toradex-kconfig.git"
linux-toradex-kconfig.git中有所有的模塊的內(nèi)核配置文件,例如用于 Verdin iMX8MP 的 verdin-imx8mp-standard.scc。該文件最終會使用 arm64.cfg和 base.cfg提供內(nèi)核配置選項(xiàng)。
define KMACHINE verdin-imx8mp define KARCH arm define KTYPE standard
include cfg/base/base.scc include cfg/arm64/arm64.scc
對于需要修改內(nèi)核配置的用戶,如果繼續(xù)使用上面提到的 KBUILD_DEFCONFIG 指定默認(rèn)配置文件,那么該配置文件則必須由用戶自己提供。如果使用 configuration fragments 的方式,可以參考下面方法創(chuàng)建 cfg 文件來提供內(nèi)核更改選項(xiàng)。
使用 configuration fragments
首先,參考 Toradex Yocto 編譯頁面配置編譯環(huán)境。使用下面三個(gè)命令修改內(nèi)核配置,并保存變更的配置內(nèi)容。
bitbake linux-toradex -c kernel_configme -f bitbake linux-toradex -c menuconfig bitbake linux-toradex -c diffconfig
在 build/tmp/work/verdin_imx8mp-tdx-linux/linux-toradex/6.6.23+git 目錄下可以看到 fragment.cfg。該文件包含了變更的配置內(nèi)容。例如,我們添加了一塊 INTEL 有線以太網(wǎng)卡的驅(qū)動 IGB,并作為內(nèi)核模塊添加進(jìn)來。
# cat fragment.cfg CONFIG_LOCALVERSION_AUTO=y CONFIG_IGB=m CONFIG_IGB_HWMON=y # CONFIG_MXC_GPU_VIV is not set
將 fragment.cfg 復(fù)制到 layers/meta-toradex-nxp/recipes-kernel/linux/linux-toradex-6.6-2.0.x 文件夾中。在 linux-toradex_6.6-2.0.x.bb 的SRC_URI中添加file://fragment.cfg \。
SRC_URI = " \ git://git.toradex.com/linux-toradex.git;protocol=https;\ branch=${SRCBRANCH};name=machine \ ${KCONFIG_REPO};protocol=https;type=kmeta;name=meta-toradex-bsp;\ branch=main;destsuffix=${KMETA} \ file://nxp-imx.cfg \ file://fragment.cfg \ "
使用下面命令清理內(nèi)核編譯緩存后重新編譯鏡像。
MACHINE=verdin-imx8mp bitbake linux-toradex -c cleansstate MACHINE=verdin-imx8mp bitbake tdx-reference-minimal-image
燒錄鏡像后可以看到,igb 驅(qū)動已經(jīng)添加到編譯的鏡像中。
root@verdin-imx8mp-07331018:~# zcat /proc/config.gz |grep IGB CONFIG_IGB=m CONFIG_IGB_HWMON=y # CONFIG_IGBVF is not set # CONFIG_HID_BIGBEN_FF is not set
root@verdin-imx8mp-07331018:~# find /lib/modules|grep igb.ko /lib/modules/6.6.23-7.0.0-devel-g558ba3740880/kernel/ drivers/net/ethernet/intel/igb/igb.ko
離線內(nèi)核源碼配置
除了在 Yocto 環(huán)境中使用 configuration fragments 方式配置內(nèi)核,有些時(shí)候往往是下載內(nèi)核源碼后,對其單獨(dú)的配置和編譯。但是 BSP 7 開始的內(nèi)核源碼中已經(jīng)不再提供默認(rèn)配置文件 toradex_defconfig。在編譯前需要從 Toradex 的 Artifacts repo 下載相關(guān)模塊的內(nèi)核配置文件 kernel-config。該文件和 Toradex 的季度/月度發(fā)布版本編譯使用同樣的內(nèi)核配置。例如 Verdin iMX8MP multimedia image v7.0.0+build.1 內(nèi)核配置文件 kernel-config 位于 tdxref-oe-prod-frankfurt/scarthgap-7.x.y/release/1/verdin-imx8mp/tdx-xwayland/tdx-reference-multimedia-image/oedeploy/kernel-config
把 kernel-config 復(fù)制到內(nèi)核源碼目錄 linux-toradex 下,并重命名為 .config 后使用 make olddefconfig命令進(jìn)行配置。
$ cp kernel-config linux-toradex && cd linux-toradex $ mv kernel-config .config $ make olddefconfig
Kernel Cmdline 變量
通過 defargs, vidargs, setupargs向內(nèi)核傳遞參數(shù)的方法在 BSP 7 已經(jīng)不再使用。tdxargs繼續(xù)保留,用戶仍舊可以通過該變量向內(nèi)核傳遞配置參數(shù)。在 Yocto 環(huán)境中,local.conf 文件中使用 APPEND可以在編譯時(shí),將需要的 command line 內(nèi)核參數(shù)添加進(jìn)來。
APPEND += " pci=nomsi"
在編譯并燒錄鏡像后,可以看到 pci=nomsi已經(jīng)傳入內(nèi)核 command line。
root@verdin-imx8mp-07331018:~# cat /proc/cmdline root=PARTUUID=e9e399c4-02 ro rootwait console=tty1 console=ttymxc2 pci=nomsi
總結(jié)
Toradex 采用現(xiàn)代軟件開發(fā)方式,提供夜間 nightly/月度 monthly/季度 quarterly 發(fā)布版本,在確保軟件質(zhì)量的同時(shí)及時(shí)更新系統(tǒng),為用戶提供最新的技術(shù)、問題修復(fù)和性能改善。
提交
基于 NXP iMX8MP 平臺簡單測試 PySide6 應(yīng)用
Verdin AM62使用CODESYS
Verdin AM62 引腳復(fù)用配置
TI AM62X Secure Boot 流程簡述
基于 TI AM62 測試 QtWayland 部署