You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于STM32MP157的自定义板Yocto编译tf-a时dtc版本检测错误

解决tf-a-stm32mp编译失败的问题

问题根源分析

  1. dtc版本误判:Dunfell版本的tf-a recipe版本校验逻辑和Kirkstone不兼容——虽然你的dtc 1.6.1远高于要求的1.4.4,但脚本可能错误提取了带v前缀的版本号,导致版本判断逻辑失效。
  2. printf参数错误:printf: v10601+: expected numeric value说明脚本在转换版本号时,把v1.6.1处理成了带字母的v10601+格式,传给printf时被当成数值参数,引发解析错误。

具体修复步骤

1. 修正dtc版本校验逻辑

找到meta-argon-bsp层中tf-a-stm32mp_2.2.bb(或同系列recipe文件),定位版本检查相关代码:

  • 替换提取dtc版本的逻辑,确保只获取纯数字版本号,避免带v前缀:
# 替换原版本提取代码
DTC_FULL_VERSION=$(dtc --version | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+')
# 转换为数值格式供校验使用
DTC_VERSION_NUM=$(printf "%d%02d%02d" $(echo $DTC_FULL_VERSION | tr '.' ' '))

2. 强制使用Yocto构建链内的dtc

Kirkstone自带适配的dtc工具,避免使用主机系统版本:

  • 在recipe中添加依赖:
DEPENDS += "dtc-native"
  • 在do_compile任务中指定构建链内的dtc路径:
EXTRA_OEMAKE += "DTC=${STAGING_BINDIR_NATIVE}/dtc"

3. 移植Kirkstone兼容的tf-a补丁

如果供应商Dunfell版本的tf-a代码存在兼容性问题:

  • 从ST官方meta-st-stm32mp的Kirkstone分支中,提取对应tf-a-2.2的适配补丁,添加到你的meta-argon-bsp层的files目录,并在recipe中引用。
  • 若硬件兼容,也可直接升级tf-a到Kirkstone支持的版本(如2.6+)。

验证修复

清理编译缓存后重新编译:

bitbake -c cleansstate tf-a-stm32mp
bitbake tf-a-stm32mp

内容的提问来源于stack exchange,提问作者radium88

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 06:30:06