Yocto BSP层如何指定defconfig及ARCH配置的技术咨询
Yocto BSP层对应独立内核编译的ARCH与defconfig配置方法
架构(ARCH)的指定
Yocto里不用像独立编译那样手动传ARCH=arm64环境变量,而是通过机器配置文件(conf/machine/<你的机器名>.conf)来定义:
- 比如arm64架构的机器,在对应的machine.conf里写
TARGET_ARCH = "aarch64"(Yocto里arm64对应的TARGET_ARCH是aarch64,和内核的ARCH参数对应) - 交叉编译工具链也不用手动指定
CROSS_COMPILE,Yocto会根据TARGET_ARCH自动匹配对应的工具链(比如从meta-arm这类层获取),相关逻辑由配方里的TOOLCHAIN_TARGET_TASK等变量处理。
主defconfig的选择
Yocto里对应独立编译make defconfig的逻辑,是通过内核配方和BSP的机器配置配合实现的:
- 默认defconfig加载:像linux-yocto这类内核配方,会根据
TARGET_ARCH自动加载内核源码里对应架构的默认defconfig,比如arm64架构就会用arch/arm64/configs/defconfig,这个逻辑在配方的do_configure任务里,通过KERNEL_DEFCONFIG变量控制。 - BSP自定义defconfig:如果BSP要用自己的主defconfig,直接在机器配置文件里覆盖
KERNEL_DEFCONFIG变量就行。比如你的defconfig放在内核源码的arch/arm64/configs下,就写:
要是defconfig存在BSP层的files目录里,得先通过KERNEL_DEFCONFIG = "${S}/arch/arm64/configs/my_bsp_defconfig"SRC_URI把它拉到内核源码目录,再指定路径。 - 生效流程:Yocto编译内核时,
do_configure任务第一步就是执行make ${KERNEL_DEFCONFIG},这完全对应独立编译时的make defconfig,之后才会叠加那些.cfg配置片段。
确认配置是否正确
可以通过两种方式验证:
- 编译完成后,去
tmp/work/<你的机器名>/linux-yocto/<版本号>/build/.config看最终配置文件,开头会标注基于哪个defconfig生成的。 - 构建时加
BB_DEBUG=1参数,查看do_configure阶段的具体命令,能看到Yocto自动执行了类似make ARCH=aarch64 defconfig的调用,工具链也是自动关联好的。
内容的提问来源于stack exchange,提问作者preetam
相关产品推荐
相关产品推荐

