By Toradex胡珊逢
Toradex 已经发布了适用于 Verdin/Apalis/Colibri 模块系列的 Linux BSP 7 版本,Yocto Project 升级到 scarthgap LTS 版本。文章将介绍新版本中的一些新特性和需要注意的地方,以及各类模块上 mainline/downstream 支持情况。
Toradex 的 BSP 通常在发布后的第四年,该 BSP 进入 EOL 状态。中间会经历活跃的开发阶段和维护期阶段。伴随着 BSP 7 发布,在 2022 年发布的 BSP 6 相应进入了维护阶段,会根据需要不定期发布 BSP 6 的维护版本。而 BSP 7 则每个季度定期发布一个季度稳定版本,该版本可用于产品开发和量产用途。
对于不同版本的选择,如果是新项目开发,建议使用最新的月度或者季度发布,从而获得最长期的软件支持。季度发布经过 Toradex 更加详细的测试和审核,可用于量产。对已有的项目,可以优先继续使用原来的 BSP。Toradex 发布的软件和硬件,往往会尽最大努力保持兼容性。
自从 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 版本使用习惯会有所不同,在迁移到 BSP 7 需要注意。详细的变更说明请参考image issue tracker。
在 BSP 7 已经不再支持基于 X11 的发布版本,但是在使用 wayland 的发布版本中默认包含的 xwayland 组件依旧提供对于依赖 X11 的应用支持。
在之前的 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 文件来提供内核更改选项。
首先,参考 Toradex Yocto 编译页面配置编译环境。使用下面三个命令修改内核配置,并保存变更的配置内容。
bitbake linux-toradex -c kernel_configme -fbitbake linux-toradex -c menuconfigbitbake linux-toradex -c diffconfig
在 build/tmp/work/verdin_imx8mp-tdx-linux/linux-toradex/6.6.23+git 目录下可以看到 fragment.cfg。该文件包含了变更的配置内容。例如,我们添加了一块 INTEL 有线以太网卡的驱动 IGB,并作为内核模块添加进来。
cat fragment.cfgCONFIG_LOCALVERSION_AUTO=yCONFIG_IGB=mCONFIG_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 cleansstateMACHINE=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
通过 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/cmdlineroot=PARTUUID=e9e399c4-02 ro rootwait console=tty1 console=ttymxc2 pci=nomsi
Toradex 采用现代软件开发方式,提供夜间 nightly/月度 monthly/季度 quarterly 发布版本,在确保软件质量的同时及时更新系统,为用户提供最新的技术、问题修复和性能改善。
作者: hai.qin_651820742, 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-1864768.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
开发工匠 2024-11-17 16:55