基于STM32MP157的自定义板Yocto编译tf-a时dtc版本检测错误
解决tf-a-stm32mp编译失败的问题
问题根源分析
- dtc版本误判:Dunfell版本的tf-a recipe版本校验逻辑和Kirkstone不兼容——虽然你的dtc 1.6.1远高于要求的1.4.4,但脚本可能错误提取了带
v前缀的版本号,导致版本判断逻辑失效。 - 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
相关产品推荐
相关产品推荐

