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

基于OpenSTLinux的Yocto项目libstd-rs编译失败求助

解决Yocto Kirkstone构建libstd-rs_1.59.0编译失败问题

问题场景

基于STM32MP157的emsbc-argon自定义开发板进行Yocto项目开发,选用Kirkstone版本,厂商提供的板级支持包(BSP)为Dunfell版本,发行版采用OpenSTLinux。构建配置如下:

Build Configuration:
BB_VERSION           = "2.0.0"
BUILD_SYS            = "x86_64-linux"
NATIVELSBSTRING      = "universal"
TARGET_SYS           = "arm-emt_eglfs-linux-gnueabi"
MACHINE              = "emsbc-argon"
DISTRO               = "emt-eglfs"
DISTRO_VERSION       = "1.3"
TUNE_FEATURES        = "arm vfp cortexa7 neon vfpv4 thumb callconvention-hard"
TARGET_FPU           = "hard"
DISTRO_CODENAME      = "kirkstone"
ACCEPT_EULA_emsbc-argon = "1"
GCCVERSION           = "11.%"
PREFERRED_PROVIDER_virtual/kernel = "linux-stm32mp-argon"
meta-emtrion-emsbc-argon 
meta-emtrion         = "<unknown>:<unknown>"
meta                 = "HEAD:f7766da462905ec67bf549d46b8017be36cd5b2a"
meta-oe                   
meta-initramfs       
meta-multimedia      
meta-python          
meta-networking      
meta-webserver       
meta-filesystems      
meta-perl            = "HEAD:05dcac98473402d87e0af73bbc2c5a6a840abe93"
meta-qt5             = "HEAD:5b71df60e523423b9df6793de9387f87a149ac42"
meta-st-stm32mp      = "HEAD:ca501bd7dbe023682903ceedddaacd940b0898f4"
meta-st-openstlinux  = "HEAD:cb736b403d0fef2a02390695613b6b4bb13ca1b7"
meta-gnome           
meta-xfce            = "HEAD:05dcac98473402d87e0af73bbc2c5a6a840abe93"

已添加两个自定义层到bblayers.conf,未主动包含任何libstd-rs相关配方,执行bitbake -c cleanall和cleansstate清理构建状态后,仍出现如下错误:

Summary: 1 task failed:
ERROR: Task (/home/hico/work/emtrion/argon-yocto/test-st-yocto/layers/openembedded-core/meta/recipes-devtools/rust/libstd-rs_1.59.0.bb:do_compile) failed with exit code '1'

解决思路

1. 定位libstd-rs的依赖触发源

libstd-rs是Rust标准库,不会凭空被构建,必然是某个配方间接依赖了Rust。执行以下命令生成依赖图,找出触发它的配方:

bitbake -g <你的镜像名称>

生成后查看pn-buildlist文件,搜索libstd-rs即可追踪到完整的依赖链,明确是哪个组件引入了Rust依赖。

2. 修复跨版本BSP兼容性问题

厂商BSP基于Dunfell,而你使用Kirkstone,两者的工具链、组件版本差异可能是核心问题:

  • 检查meta-emtrion-emsbc-argon和meta-emtrion层中是否存在硬编码的Rust版本、工具链配置,比如强制指定旧版Rust,导致与Kirkstone自带的Rust 1.59.0冲突。
  • 优先尝试获取厂商提供的Kirkstone版本BSP;如果没有,手动适配:对比Dunfell与Kirkstone的meta-st-stm32mp、meta-st-openstlinux层差异,调整BSP中的内核配置、设备树、工具链相关配方,确保与Kirkstone的基础层兼容。

3. 调整Rust编译的目标架构与工具链配置

针对Cortex-A7的STM32MP157,检查并调整以下配置:

  • 在local.conf中明确指定Rust目标三元组,匹配你的硬件和工具链:
    RUST_TARGET = "armv7-unknown-linux-gnueabihf"
    
  • 修正GCC版本配置,当前GCCVERSION = "11.%"过于模糊,指定具体版本以确保与Rust 1.59.0兼容,比如:
    GCCVERSION = "11.3%"
    

4. 排除自定义层的干扰

临时注释bblayers.conf中的自定义层,重新构建。如果问题消失,再逐个恢复自定义层,排查其中是否有配方间接引入了Rust依赖(比如某些现代组件默认启用Rust支持)。

5. 彻底清理构建环境

除了常规清理命令,尝试更彻底的重置:

  • 删除整个构建目录,重新执行source oe-init-build-env生成全新配置后再构建。
  • 删除downloads目录下的Rust相关包,强制重新下载兼容版本的源码包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:35:42