Yocto Linux BSP7 新版本介绍

供稿:韬睿(上海)计算机科技有限公司

  • 关键词:ARM,Linux,Toradex
  • 作者:By Toradex 胡珊逢
  • 摘要:Toradex 已经发布了适用于 Verdin/Apalis/Colibri 模块系列的 Linux BSP 7 版本,Yocto Project 升级到 scarthgap LTS 版本。文章将介绍新版本中的一些新特性和需要注意的地方,以及各类模块上 mainline/downstream 支持情况。


简介

Toradex 已经发布了适用于 Verdin/Apalis/Colibri 模块系列的 Linux BSP 7 版本,Yocto Project 升级到 scarthgap LTS 版本。文章将介绍新版本中的一些新特性和需要注意的地方,以及各类模块上 mainline/downstream 支持情况。


BSP 支持周期

Toradex 的 BSP 通常在发布后的第四年,该 BSP 进入 EOL 状态。中间会经历活跃的开发阶段和维护期阶段。伴随着 BSP 7 发布,在 2022 年发布的 BSP 6 相应进入了维护阶段,会根据需要不定期发布 BSP 6 的维护版本。而 BSP 7 则每个季度定期发布一个季度稳定版本,该版本可用于产品开发和量产用途。


对于不同版本的选择,如果是新项目开发,建议使用最新的月度或者季度发布,从而获得最长期的软件支持。季度发布经过 Toradex 更加详细的测试和审核,可用于量产。对已有的项目,可以优先继续使用原来的 BSP。Toradex 发布的软件和硬件,往往会尽最大努力保持兼容性。


mainline/downstream 支持

自从 BSP 5 开始,Toradex 已经开始在部分 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 则继续使用来自 NXP 或者 TI 的 downstream 系统。Verdin iMX8MP 上除了 downstream 系统,还可以使用实验性的 upstream 系统。


BSP 7 新特性

下面是 BSP 7 中一些主要的更新和变化,可能和之前的 BSP 版本使用习惯会有所不同,在迁移到 BSP 7 需要注意。详细的变更说明请参考image issue tracker。


移除 X11 distro

在 BSP 7 已经不再支持基于 X11 的发布版本,但是在使用 wayland 的发布版本中默认包含的 xwayland 组件依旧提供对于依赖 X11 的应用支持。


Kernel config

在之前的 BSP 版本中,kernel config 采用内核源码中 toradex_defconfig 文件。例如 BSP 6 中 Verdin iMX8MP 内核 recipe linux-toradex_5.15-2.2.x.bb中 KBUILD_DEFCONFIG使用 toradex_defconfig。直接在内核源码中类似地使用 make toradex_defconfig命令进行配置。

KBUILD_DEFCONFIG:mx8-nxp-bsp ?= "toradex_defconfig"

从 BSP 7 开始,Toradex 采用 Yocto Project 中 configuration fragments方式配置内核。BSP 7 中 Verdin iMX8MP 内核 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中有所有的模块的内核配置文件,例如用于 Verdin iMX8MP 的 verdin-imx8mp-standard.scc。该文件最终会使用 arm64.cfg和 base.cfg提供内核配置选项。

define KMACHINE verdin-imx8mp
define KARCH arm
define KTYPE standard

include cfg/base/base.scc
include cfg/arm64/arm64.scc


对于需要修改内核配置的用户,如果继续使用上面提到的 KBUILD_DEFCONFIG 指定默认配置文件,那么该配置文件则必须由用户自己提供。如果使用 configuration fragments 的方式,可以参考下面方法创建 cfg 文件来提供内核更改选项。


使用 configuration fragments


首先,参考 Toradex Yocto 编译页面配置编译环境。使用下面三个命令修改内核配置,并保存变更的配置内容。

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。该文件包含了变更的配置内容。例如,我们添加了一块 INTEL 有线以太网卡的驱动 IGB,并作为内核模块添加进来。

# cat fragment.cfg
CONFIG_LOCALVERSION_AUTO=y
CONFIG_IGB=m
CONFIG_IGB_HWMON=y
# CONFIG_MXC_GPU_VIV is not set


将 fragment.cfg 复制到 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 \
"

使用下面命令清理内核编译缓存后重新编译镜像。

MACHINE=verdin-imx8mp bitbake linux-toradex -c cleansstate
MACHINE=verdin-imx8mp bitbake tdx-reference-minimal-image


烧录镜像后可以看到,igb 驱动已经添加到编译的镜像中。

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


离线内核源码配置


除了在 Yocto 环境中使用 configuration fragments 方式配置内核,有些时候往往是下载内核源码后,对其单独的配置和编译。但是 BSP 7 开始的内核源码中已经不再提供默认配置文件 toradex_defconfig。在编译前需要从 Toradex 的 Artifacts repo 下载相关模块的内核配置文件 kernel-config。该文件和 Toradex 的季度/月度发布版本编译使用同样的内核配置。例如 Verdin iMX8MP multimedia image v7.0.0+build.1 内核配置文件 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 复制到内核源码目录 linux-toradex 下,并重命名为 .config 后使用 make olddefconfig命令进行配置。

$ cp kernel-config linux-toradex && cd linux-toradex
$ mv kernel-config .config 
$ make olddefconfig


Kernel Cmdline 变量

通过 defargs, vidargs, setupargs向内核传递参数的方法在 BSP 7 已经不再使用。tdxargs继续保留,用户仍旧可以通过该变量向内核传递配置参数。在 Yocto 环境中,local.conf 文件中使用 APPEND可以在编译时,将需要的 command line 内核参数添加进来。

APPEND += " pci=nomsi"


在编译并烧录镜像后,可以看到 pci=nomsi已经传入内核 command line。

root@verdin-imx8mp-07331018:~# cat /proc/cmdline
root=PARTUUID=e9e399c4-02 ro rootwait console=tty1 console=ttymxc2 pci=nomsi


总结

Toradex 采用现代软件开发方式,提供夜间 nightly/月度 monthly/季度 quarterly 发布版本,在确保软件质量的同时及时更新系统,为用户提供最新的技术、问题修复和性能改善。



发布时间:2024年11月12日 10:34  人气:   审核编辑(王静 )
相关链接

我有需求