【求助】component_drivers编译报错:依赖lua未找到

问题描述

使用./scripts/smart_build.sh一键编译测试时报错:

some_dep = dependency('some')
executable(..., dependencies: [some_dep])

This warning will become a hard error in a future Meson release.

mcapp| Dependency mcbase found: YES 1.0.0 (cached)
mcapp| Dependency mcexpr found: YES 0.1.0 (overridden)
mcapp| Dependency lua found: NO (overridden)

subprojects/libmcpp/libraries/mcapp/meson.build:97:10: ERROR: Dependency 'lua' is required but not found.

A full log can be found at /home/workspace/source/component_drivers/builddir/meson-logs/meson-log.txt

lua依赖已经安装了,之前都可以正常编译、测试,此外使用 bingo build --stage stable 可以正常构建,但是后续在manifest中编译的固件包烧录到米尔开发板之后网卡驱动加载失败并报错(驱动so文件确认生成并可执行,之前的测试已经验证):

undefined symbol: _ZN2mc6engine26property_processor_factory30process_property_value_variantEPNS0_15property_helperERKNS_12variant_baseE

app.log的部分报错如下:

1970-01-01 00:00:22.954681 unknown_service ERROR: init.lua(65): launch_control_00_01.json does not exist.
1970-01-01 00:00:23.191971 devmon WARNING: app_schema.cpp(36): App schema path not exists: /opt/bmc/extend/apps/
1970-01-01 00:00:23.328625 unknown_service NOTICE: harbor.lua(32): start message queue harbor.bmc.kepler.framework receive loop, id = 1
1970-01-01 00:00:24.859123 devmon WARNING: topology_discovery.cpp(269): managed_objects: {}
1970-01-01 00:00:26.055588 devmon NOTICE: topology_discovery.cpp(174): add objectgroup start, path: /bmc/kepler/ObjectGroup/00
1970-01-01 00:00:26.085555 devmon NOTICE: topology_discovery.cpp(176): add objectgroup finished, path: /bmc/kepler/ObjectGroup/00
1970-01-01 00:00:26.345591 devmon NOTICE: topology_discovery.cpp(174): add objectgroup start, path: /bmc/kepler/ObjectGroup/01
1970-01-01 00:00:26.682125 devmon ERROR: device_topo.cpp(144): create device failed: I2c_1, error: Failed to load driver: /usr/lib64/libdevice_tree.so: undefined symbol: _ZN2mc6engine26property_processor_factory30process_property_value_variantEPNS0_15property_helperERKNS_12variant_baseE
1970-01-01 00:00:26.682692 devmon WARNING: device_topo.cpp(454): failed to create or get bus node: I2c_1
1970-01-01 00:00:26.702794 devmon ERROR: device_topo.cpp(144): create device failed: I2c_2, error: Failed to load driver: /usr/lib64/libdevice_tree.so: undefined symbol: _ZN2mc6engine26property_processor_factory30process_property_value_variantEPNS0_15property_helperERKNS_12variant_baseE
1970-01-01 00:00:26.703441 devmon WARNING: device_topo.cpp(454): failed to create or get bus node: I2c_2
1970-01-01 00:00:26.723342 devmon ERROR: device_topo.cpp(144): create device failed: I2c_3, error: Failed to load driver: /usr/lib64/libdevice_tree.so: undefined symbol: _ZN2mc6engine26property_processor_factory30process_property_value_variantEPNS0_15property_helperERKNS_12variant_baseE
1970-01-01 00:00:26.723771 devmon WARNING: device_topo.cpp(454): failed to create or get bus node: I2c_3
1970-01-01 00:00:26.743757 devmon ERROR: device_topo.cpp(144): create device failed: I2c_4, error: Failed to load driver: /usr/lib64/libdevice_tree.so: undefined symbol: _ZN2mc6engine26property_processor_factory30process_property_value_variantEPNS0_15property_helperERKNS_12variant_baseE
1970-01-01 00:00:26.744277 devmon WARNING: device_topo.cpp(454): failed to create or get bus node: I2c_4
1970-01-01 00:00:26.771676 devmon ERROR: device_topo.cpp(144): create device failed: I2c_5, error: Failed to load driver: /usr/lib64/libdevice_tree.so: undefined symbol: _ZN2mc6engine26property_processor_factory30process_property_value_variantEPNS0_15property_helperERKNS_12variant_baseE
1970-01-01 00:00:26.772137 devmon WARNING: device_topo.cpp(454): failed to create or get bus node: I2c_5
1970-01-01 00:00:26.790312 devmon ERROR: device_topo.cpp(144): create device failed: I2c_6, error: Failed to load driver: /usr/lib64/libdevice_tree.so: undefined symbol: _ZN2mc6engine26property_processor_factory30process_property_value_variantEPNS0_15property_helperERKNS_12variant_baseE
1970-01-01 00:00:26.790836 devmon WARNING: device_topo.cpp(454): failed to create or get bus node: I2c_6
1970-01-01 00:00:26.810119 devmon ERROR: device_topo.cpp(144): create device failed: I2c_7, error: Failed to load driver: /usr/lib64/libdevice_tree.so: undefined symbol: _ZN2mc6engine26property_processor_factory30process_property_value_variantEPNS0_15property_helperERKNS_12variant_baseE
1970-01-01 00:00:26.810615 devmon WARNING: device_topo.cpp(454): failed to create or get bus node: I2c_7
1970-01-01 00:00:26.828583 devmon ERROR: device_topo.cpp(144): create device failed: I2c_8, error: Failed to load driver: /usr/lib64/libdevice_tree.so: undefined symbol: _ZN2mc6engine26property_processor_factory30process_property_value_variantEPNS0_15property_helperERKNS_12variant_baseE
1970-01-01 00:00:26.829083 devmon WARNING: device_topo.cpp(454): failed to create or get bus node: I2c_8
1970-01-01 00:00:26.847893 devmon ERROR: device_topo.cpp(144): create device failed: I2c_11, error: Failed to load driver: /usr/lib64/libdevice_tree.so: undefined symbol: _ZN2mc6engine26property_processor_factory30process_property_value_variantEPNS0_15property_helperERKNS_12variant_baseE
1970-01-01 00:00:26.848411 devmon WARNING: device_topo.cpp(454): failed to create or get bus node: I2c_11
1970-01-01 00:00:26.870958 devmon ERROR: device_topo.cpp(144): create device failed: Jtag_1, error: Failed to load driver: /opt/bmc/drivers/libJtag.so: cannot open shared object file: No such file or directory
1970-01-01 00:00:26.871407 devmon WARNING: device_topo.cpp(454): failed to create or get bus node: Jtag_1
1970-01-01 00:00:26.887742 devmon ERROR: device_topo.cpp(144): create device failed: JtagOverLocalBus_1, error: Failed to load driver: /opt/bmc/drivers/libJtagOverLocalBus.so: cannot open shared object file: No such file or directory
1970-01-01 00:00:26.888511 devmon WARNING: device_topo.cpp(454): failed to create or get bus node: JtagOverLocalBus_1
1970-01-01 00:00:26.948573 devmon ERROR: device_topo.cpp(144): create device failed: Hisport_0, error: Failed to load driver: /usr/lib64/libdevice_tree.so: undefined symbol: _ZN2mc6engine26property_processor_factory30process_property_value_variantEPNS0_15property_helperERKNS_12variant_baseE
1970-01-01 00:00:26.954185 devmon WARNING: device_topo.cpp(454): failed to create or get bus node: Hisport_0
1970-01-01 00:00:26.988793 devmon ERROR: device_topo.cpp(144): create device failed: Hisport_1, error: Failed to load driver: /usr/lib64/libdevice_tree.so: undefined symbol: _ZN2mc6engine26property_processor_factory30process_property_value_variantEPNS0_15property_helperERKNS_12variant_baseE
1970-01-01 00:00:26.989356 devmon WARNING: device_topo.cpp(454): failed to create or get bus node: Hisport_1
1970-01-01 00:00:27.035170 devmon ERROR: device_topo.cpp(144): create device failed: Hisport_2, error: Failed to load driver: /usr/lib64/libdevice_tree.so: undefined symbol: _ZN2mc6engine26property_processor_factory30process_property_value_variantEPNS0_15property_helperERKNS_12variant_baseE
1970-01-01 00:00:27.040968 devmon WARNING: device_topo.cpp(454): failed to create or get bus node: Hisport_2
1970-01-01 00:00:27.063592 devmon ERROR: device_topo.cpp(144): create device failed: Hisport_3, error: Failed to load driver: /usr/lib64/libdevice_tree.so: undefined symbol: _ZN2mc6engine26property_processor_factory30process_property_value_variantEPNS0_15property_helperERKNS_12variant_baseE
1970-01-01 00:00:27.064596 devmon WARNING: device_topo.cpp(454): failed to create or get bus node: Hisport_3
1970-01-01 00:00:27.086285 devmon ERROR: device_topo.cpp(144): create device failed: Hisport_4, error: Failed to load driver: /usr/lib64/libdevice_tree.so: undefined symbol: _ZN2mc6engine26property_processor_factory30process_property_value_variantEPNS0_15property_helperERKNS_12variant_baseE
1970-01-01 00:00:27.087185 devmon WARNING: device_topo.cpp(454): failed to create or get bus node: Hisport_4
1970-01-01 00:00:27.106550 devmon ERROR: device_topo.cpp(144): create device failed: Hisport_5, error: Failed to load driver: /usr/lib64/libdevice_tree.so: undefined symbol: _ZN2mc6engine26property_processor_factory30process_property_value_variantEPNS0_15property_helperERKNS_12variant_baseE
1970-01-01 00:00:27.107555 devmon WARNING: device_topo.cpp(454): failed to create or get bus node: Hisport_5
1970-01-01 00:00:27.126877 devmon ERROR: device_topo.cpp(144): create device failed: Hisport_6, error: Failed to load driver: /usr/lib64/libdevice_tree.so: undefined symbol: _ZN2mc6engine26property_processor_factory30process_property_value_variantEPNS0_15property_helperERKNS_12variant_baseE
1970-01-01 00:00:27.127747 devmon WARNING: device_topo.cpp(454): failed to create or get bus node: Hisport_6
1970-01-01 00:00:27.151904 devmon ERROR: device_topo.cpp(144): create device failed: Hisport_7, error: Failed to load driver: /usr/lib64/libdevice_tree.so: undefined symbol: _ZN2mc6engine26property_processor_factory30process_property_value_variantEPNS0_15property_helperERKNS_12variant_baseE
1970-01-01 00:00:27.152722 devmon WARNING: device_topo.cpp(454): failed to create or get bus node: Hisport_7
1970-01-01 00:00:27.181468 devmon ERROR: device_topo.cpp(144): create device failed: Hisport_8, error: Failed to load driver: /usr/lib64/libdevice_tree.so: undefined symbol: _ZN2mc6engine26property_processor_factory30process_property_value_variantEPNS0_15property_helperERKNS_12variant_baseE
1970-01-01 00:00:27.182320 devmon WARNING: device_topo.cpp(454): failed to create or get bus node: Hisport_8
1970-01-01 00:00:27.211449 devmon ERROR: device_topo.cpp(144): create device failed: Hisport_9, error: Failed to load driver: /usr/lib64/libdevice_tree.so: undefined symbol: _ZN2mc6engine26property_processor_factory30process_property_value_variantEPNS0_15property_helperERKNS_12variant_baseE
1970-01-01 00:00:27.212435 devmon WARNING: device_topo.cpp(454): failed to create or get bus node: Hisport_9
1970-01-01 00:00:27.245742 devmon ERROR: device_topo.cpp(144): create device failed: Hisport_10, error: Failed to load driver: /usr/lib64/libdevice_tree.so: undefined symbol: _ZN2mc6engine26property_processor_factory30process_property_value_variantEPNS0_15property_helperERKNS_12variant_baseE
1970-01-01 00:00:27.246662 devmon WARNING: device_topo.cpp(454): failed to create or get bus node: Hisport_10
1970-01-01 00:00:27.285051 devmon ERROR: device_topo.cpp(144): create device failed: Hisport_11, error: Failed to load driver: /usr/lib64/libdevice_tree.so: undefined symbol: _ZN2mc6engine26property_processor_factory30process_property_value_variantEPNS0_15property_helperERKNS_12variant_baseE
1970-01-01 00:00:27.285951 devmon WARNING: device_topo.cpp(454): failed to create or get bus node: Hisport_11
1970-01-01 00:00:27.327720 devmon ERROR: device_topo.cpp(144): create device failed: Hisport_12, error: Failed to load driver: /usr/lib64/libdevice_tree.so: undefined symbol: _ZN2mc6engine26property_processor_factory30process_property_value_variantEPNS0_15property_helperERKNS_12variant_baseE
1970-01-01 00:00:27.329209 devmon WARNING: device_topo.cpp(454): failed to create or get bus node: Hisport_12
1970-01-01 00:00:27.359340 devmon ERROR: device_topo.cpp(144): create device failed: Hisport_13, error: Failed to load driver: /usr/lib64/libdevice_tree.so: undefined symbol: _ZN2mc6engine26property_processor_factory30process_property_value_variantEPNS0_15property_helperERKNS_12variant_baseE
1970-01-01 00:00:27.360281 devmon WARNING: device_topo.cpp(454): failed to create or get bus node: Hisport_13
1970-01-01 00:00:27.408234 devmon ERROR: device_topo.cpp(144): create device failed: Hisport_14, error: Failed to load driver: /usr/lib64/libdevice_tree.so: undefined symbol: _ZN2mc6engine26property_processor_factory30process_property_value_variantEPNS0_15property_helperERKNS_12variant_baseE
1970-01-01 00:00:27.440373 devmon WARNING: device_topo.cpp(454): failed to create or get bus node: Hisport_14
1970-01-01 00:00:27.490859 devmon ERROR: device_topo.cpp(144): create device failed: Hisport_15, error: Failed to load driver: /usr/lib64/libdevice_tree.so: undefined symbol: _ZN2mc6engine26property_processor_factory30process_property_value_variantEPNS0_15property_helperERKNS_12variant_baseE
1970-01-01 00:00:27.491773 devmon WARNING: device_topo.cpp(454): failed to create or get bus node: Hisport_15
1970-01-01 00:00:27.538425 devmon ERROR: device_topo.cpp(144): create device failed: Hisport_16, error: Failed to load driver: /usr/lib64/libdevice_tree.so: undefined symbol: _ZN2mc6engine26property_processor_factory30process_property_value_variantEPNS0_15property_helperERKNS_12variant_baseE
1970-01-01 00:00:27.539680 devmon WARNING: device_topo.cpp(454): failed to create or get bus node: Hisport_16
1970-01-01 00:00:27.575669 devmon ERROR: device_topo.cpp(144): create device failed: Hisport_17, error: Failed to load driver: /usr/lib64/libdevice_tree.so: undefined symbol: _ZN2mc6engine26property_processor_factory30process_property_value_variantEPNS0_15property_helperERKNS_12variant_baseE
1970-01-01 00:00:27.576546 devmon WARNING: device_topo.cpp(454): failed to create or get bus node: Hisport_17
1970-01-01 00:00:27.621963 devmon ERROR: device_topo.cpp(144): create device failed: Hisport_18, error: Failed to load driver: /usr/lib64/libdevice_tree.so: undefined symbol: _ZN2mc6engine26property_processor_factory30process_property_value_variantEPNS0_15property_helperERKNS_12variant_baseE
1970-01-01 00:00:27.622772 devmon WARNING: device_topo.cpp(454): failed to create or get bus node: Hisport_18
1970-01-01 00:00:27.666218 devmon ERROR: device_topo.cpp(144): create device failed: Hisport_19, error: Failed to load driver: /usr/lib64/libdevice_tree.so: undefined symbol: _ZN2mc6engine26property_processor_factory30process_property_value_variantEPNS0_15property_helperERKNS_12variant_baseE
1970-01-01 00:00:27.666747 devmon WARNING: device_topo.cpp(454): failed to create or get bus node: Hisport_19
1970-01-01 00:00:27.720819 devmon ERROR: device_topo.cpp(144): create device failed: Hisport_20, error: Failed to load driver: /usr/lib64/libdevice_tree.so: undefined symbol: _ZN2mc6engine26property_processor_factory30process_property_value_variantEPNS0_15property_helperERKNS_12variant_baseE
1970-01-01 00:00:27.721649 devmon WARNING: device_topo.cpp(454): failed to create or get bus node: Hisport_20
1970-01-01 00:00:27.755022 devmon ERROR: device_topo.cpp(144): create device failed: Hisport_21, error: Failed to load driver: /usr/lib64/libdevice_tree.so: undefined symbol: _ZN2mc6engine26property_processor_factory30process_property_value_variantEPNS0_15property_helperERKNS_12variant_baseE
1970-01-01 00:00:27.762039 devmon WARNING: device_topo.cpp(454): failed to create or get bus node: Hisport_21
1970-01-01 00:00:27.839231 devmon ERROR: device_topo.cpp(144): create device failed: Gpio_31, error: Failed to load driver: /opt/bmc/drivers/libGpio.so: cannot open shared object file: No such file or directory
1970-01-01 00:00:27.840339 devmon WARNING: device_topo.cpp(454): failed to create or get bus node: Gpio_31
1970-01-01 00:00:27.847385 devmon ERROR: device_topo.cpp(144): create device failed: Gpio_56, error: Failed to load driver: /opt/bmc/drivers/libGpio.so: cannot open shared object file: No such file or directory
1970-01-01 00:00:27.848210 devmon WARNING: device_topo.cpp(454): failed to create or get bus node: Gpio_56
1970-01-01 00:00:27.855500 devmon ERROR: device_topo.cpp(144): create device failed: Gpio_74, error: Failed to load driver: /opt/bmc/drivers/libGpio.so: cannot open shared object file: No such file or directory
1970-01-01 00:00:27.856360 devmon WARNING: device_topo.cpp(454): failed to create or get bus node: Gpio_74
1970-01-01 00:00:27.857106 devmon NOTICE: device_topo.cpp(556): add topology success for position: 01
1970-01-01 00:00:27.859275 devmon NOTICE: topology_discovery.cpp(176): add objectgroup finished, path: /bmc/kepler/ObjectGroup/01
1970-01-01 00:00:27.860647 devmon NOTICE: topology_discovery.cpp(174): add objectgroup start, path: /bmc/kepler/ObjectGroup/0103
1970-01-01 00:00:27.873253 devmon NOTICE: topology_discovery.cpp(176): add objectgroup finished, path: /bmc/kepler/ObjectGroup/0103
1970-01-01 00:00:27.876583 devmon NOTICE: topology_discovery.cpp(174): add objectgroup start, path: /bmc/kepler/ObjectGroup/0102
1970-01-01 00:00:27.970759 devmon ERROR: csr.cpp(46): load compatible driver dpn_dn200 failed, error: Failed to load driver: /usr/lib64/libdev_mctp.so: undefined symbol: _ZN2mc6engine26property_processor_factory30process_property_value_variantEPNS0_15property_helperERKNS_12variant_baseE
1970-01-01 00:00:27.982049 devmon WARNING: service_backend.cpp(108): service_backend dispatch error: parse_error: Driver not found: dpn_dn200
1970-01-01 00:00:27.984030 devmon NOTICE: topology_discovery.cpp(176): add objectgroup finished, path: /bmc/kepler/ObjectGroup/0102
1970-01-01 00:00:51.501507 bmc_core NOTICE: app_config.lua(182): init shared memory, harbor_name=harbor.bmc.kepler.bmc_core
1970-01-01 00:00:51.617474 security NOTICE: app_config.lua(182): init shared memory, harbor_name=harbor.bmc.kepler.security
1970-01-01 00:00:51.681453 alarm NOTICE: app_config.lua(182): init shared memory, harbor_name=harbor.bmc.kepler.alarm
1970-01-01 00:00:51.686578 ras NOTICE: app_config.lua(182): init shared memory, harbor_name=harbor.bmc.kepler.ras

尝试清理并构建 ./scripts/smart_build.sh --clean-all,或者删除component_drivers组件重新clone,但是无效。

在之前的正常编译和现在的异常之间应该没有改动系统环境配置,仅修改了component_drivers的网卡驱动,请大家帮忙看下可能是什么问题?

环境信息

  • 操作系统:Ubuntu 24.04

  • 软件版本:OpenUBMC2603

  • 硬件配置:米尔开发板 Hi3093

重现步骤

  1. [第一步]

  2. [第二步]

  3. [第三步]

期望结果

[您希望实现什么]

实际结果

[实际发生了什么,包含错误信息]

尝试过的解决方案

[列出您已经尝试过的解决方案及结果]

分析结论

[详细总结您对此问题的分析结论]

答案内容由AI生成,仅供参考:
好的,我们来分析您遇到的这个问题。

根据您提供的详细描述和日志,您遇到的问题主要集中在两个方面:编译时的依赖缺失运行时驱动加载失败。下面我将基于提供的上下文信息,对这两个问题进行分析和解答。

问题一:编译时 lua 依赖未找到

问题现象:
在使用 ./scripts/smart_build.sh 进行编译时,meson.build 报告 Dependency 'lua' is required but not found,导致编译失败。而您提到 lua 依赖已安装,且之前可以正常编译。

可能原因分析:
从上下文信息来看,您遇到的问题与 devmon 组件相关的构建过程高度相似。

  1. 构建环境不一致:您提到使用 bingo build --stage stable 可以正常构建,但使用 ./scripts/smart_build.sh 却失败。这表明两种构建方式可能使用了不同的构建环境或配置文件bingo build 通常会依赖 bmc_sdk 和正确的 Conan 配置文件(如 profile.luajit.ini)来解析所有依赖。
  2. 缺少 bmc_sdk 初始化步骤:在上下文中,有一个类似的案例(reference_id: "1")明确指出 docker 镜像中可能缺少安装 bmc_sdk 的步骤,导致运行时依赖 skynet 找不到。bmc_sdk 是 OpenUBMC 项目的软件开发工具包,它集成了包括交叉编译工具链、运行时库(可能包含 lua)在内的所有必要构建依赖。如果 smart_build.sh 没有像 bingo build 那样正确初始化或链接到 bmc_sdk,它可能就无法找到 lua 库。

建议的解决方案:

  1. 切换到 bingo build 并确保其工作流完整:既然 bingo build --stage stable 可以正常工作,建议优先使用这种方式进行完整的固件构建。根据上下文(reference_id: "10"),bingo build 是官方推荐的构建流程。
  2. 验证 bmc_sdk 安装:如果必须使用 smart_build.sh,请检查该脚本是否正确初始化了 bmc_sdk 环境。您可以参考 bingo build -t install_sdk 的步骤来手动确保 SDK 正确安装,并与当前 OpenUBMC 版本(2603)匹配。根据上下文,bmc_sdk 版本不匹配是导致构建失败的常见原因。
  3. 更新组件代码:上下文reference_id: "1"中,当遇到 skynet 依赖未找到时,社区专家 xuhaijun 建议“更新组件代码后重试,最好使用最新正在合入的分支尝试构建”。您可以尝试拉取最新的 component_drivers 代码并重试。

问题二:运行时网卡驱动加载失败(undefined symbol)

问题现象:
固件烧录后,devmon 服务在尝试加载 /usr/lib64/libdevice_tree.so 驱动时失败,报错 undefined symbol: _ZN2mc6engine26property_processor_factory30process_property_value_variantEPNS0_15property_helperERKNS_12variant_baseE。这个错误广泛影响了多个 I2C、Hisport 和 MCTP 总线,导致网卡驱动无法加载。

根因分析:
这个问题的根因是 ABI(应用二进制接口)不兼容。具体来说,libdevice_tree.so 在运行时依赖于一个名为 process_property_value_variant 的符号。这个符号是由另一个运行时库(很可能是 libmc.so 或类似的引擎库)提供的。在您烧录的固件包中,libdevice_tree.so 是在一个包含旧版符号的环境下编译的,而运行时环境中的库却不包含这个符号。

这与您的观察完全吻合:您修改了组件驱动,但使用 bingo build --stage stable 在 Manifest 中编译出的整体固件的链接环境发生了变化。最可能的原因是:component_drivers 在通过 Manifest 进行整包编译时,链接到了不同版本(或不兼容版本)的核心依赖库,如 libmclibmc4lua

核心问题不在于驱动 .so 文件是否存在,而在于它引用的外部符号在运行时找不到。

建议的解决方案:

  1. 统一编译版本:这是最关键的一步。请确保您编译 component_driversbmc_sdkConan 依赖版本,与您在 manifest 中用于整包编译的版本完全一致。社区专家 xuhaijun河南昆仑-郑豪伟 都曾指出,SDK 版本不匹配是导致构建和运行时问题的常见根因。请使用 Manifest 对应分支(如 br_release_openUBMC2509_20251230)指定的 bmc_sdk 进行初始化。
  2. 检查 Manifest 中的依赖声明:检查 manifest.yml 文件中 component_drivers 组件的依赖声明,特别是对 libmc4lua 等核心库的版本约束。确保其版本范围与您期望的一致。上下文提供了核心依赖的版本解析示例,您可以作为参考:
    libmc4lua/[>=1.0.0]@openubmc/stable: libmc4lua/1.90.92@openubmc/stable
    
    如果 manifest.yml 中锁定的版本是 1.90.92,但您在本地构建 component_drivers 时链接到了一个不同版本的 libmc4lua,就会出现您遇到的符号缺失问题。
  3. 清理并重新构建
    • 清理本地 Conan 缓存中与 component_drivers 相关的包,强制其在下一次整包编译时重新构建。您可以使用 conan remove "component_drivers/*" 或类似命令。
    • 完全删除 manifest 目录下的 buildtemp 等构建产物目录,然后重新执行 bingo build。这能确保所有组件都基于同一套依赖配置进行重建。
  4. 分析符号来源:作为更高级的调试手段,您可以在本地环境中找到提供 process_property_value_variant 符号的 .so 文件。使用 nm -D <库文件.so> | grep "process_property_value_variant" 命令确认。然后检查该文件是否被正确打包到了您的固件包中,以及其版本是否与 component_drivers 编译时使用的版本一致。

总结

您遇到的问题可以分为编译和运行两个阶段。编译阶段的 lua 未找到问题指向了构建环境初始化的不一致;而运行时的 undefined symbol 问题则是一个典型的 ABI 兼容性问题,核心原因是 component_drivers 在子编译和整包编译时链接到了不兼容的依赖库版本

最推荐的解决方案是: 完全依赖 bingo build 的完整流程,并确保用于初始化环境的 bmc_sdk 版本与您 Manifest 目标分支(OpenUBMC2603)严格匹配。在修改驱动后,建议进行完整的清理(包括 Conan 缓存)和重构建,以避免本地缓存导致版本混用。

点击此处查看详细分析解答

好的,我们来分析您遇到的这个问题。

根据您提供的详细描述和日志,您遇到的问题主要集中在两个方面:编译时的依赖缺失运行时驱动加载失败。下面我将基于提供的上下文信息,对这两个问题进行分析和解答。

问题一:编译时 lua 依赖未找到

问题现象:
在使用 ./scripts/smart_build.sh 进行编译时,meson.build 报告 Dependency 'lua' is required but not found,导致编译失败。而您提到 lua 依赖已安装,且之前可以正常编译。

可能原因分析:
从上下文信息来看,您遇到的问题与 devmon 组件相关的构建过程高度相似。

  1. 构建环境不一致:您提到使用 bingo build --stage stable 可以正常构建,但使用 ./scripts/smart_build.sh 却失败。这表明两种构建方式可能使用了不同的构建环境或配置文件bingo build 通常会依赖 bmc_sdk 和正确的 Conan 配置文件(如 profile.luajit.ini)来解析所有依赖。
  2. 缺少 bmc_sdk 初始化步骤:在上下文中,有一个类似的案例(reference_id: "1")明确指出 docker 镜像中可能缺少安装 bmc_sdk 的步骤,导致运行时依赖 skynet 找不到。bmc_sdk 是 OpenUBMC 项目的软件开发工具包,它集成了包括交叉编译工具链、运行时库(可能包含 lua)在内的所有必要构建依赖。如果 smart_build.sh 没有像 bingo build 那样正确初始化或链接到 bmc_sdk,它可能就无法找到 lua 库。

建议的解决方案:

  1. 切换到 bingo build 并确保其工作流完整:既然 bingo build --stage stable 可以正常工作,建议优先使用这种方式进行完整的固件构建。根据上下文(reference_id: "10"),bingo build 是官方推荐的构建流程。
  2. 验证 bmc_sdk 安装:如果必须使用 smart_build.sh,请检查该脚本是否正确初始化了 bmc_sdk 环境。您可以参考 bingo build -t install_sdk 的步骤来手动确保 SDK 正确安装,并与当前 OpenUBMC 版本(2603)匹配。根据上下文,bmc_sdk 版本不匹配是导致构建失败的常见原因。
  3. 更新组件代码:上下文reference_id: "1"中,当遇到 skynet 依赖未找到时,社区专家 xuhaijun 建议“更新组件代码后重试,最好使用最新正在合入的分支尝试构建”。您可以尝试拉取最新的 component_drivers 代码并重试。

问题二:运行时网卡驱动加载失败(undefined symbol)

问题现象:
固件烧录后,devmon 服务在尝试加载 /usr/lib64/libdevice_tree.so 驱动时失败,报错 undefined symbol: _ZN2mc6engine26property_processor_factory30process_property_value_variantEPNS0_15property_helperERKNS_12variant_baseE。这个错误广泛影响了多个 I2C、Hisport 和 MCTP 总线,导致网卡驱动无法加载。

根因分析:
这个问题的根因是 ABI(应用二进制接口)不兼容。具体来说,libdevice_tree.so 在运行时依赖于一个名为 process_property_value_variant 的符号。这个符号是由另一个运行时库(很可能是 libmc.so 或类似的引擎库)提供的。在您烧录的固件包中,libdevice_tree.so 是在一个包含旧版符号的环境下编译的,而运行时环境中的库却不包含这个符号。

这与您的观察完全吻合:您修改了组件驱动,但使用 bingo build --stage stable 在 Manifest 中编译出的整体固件的链接环境发生了变化。最可能的原因是:component_drivers 在通过 Manifest 进行整包编译时,链接到了不同版本(或不兼容版本)的核心依赖库,如 libmclibmc4lua

核心问题不在于驱动 .so 文件是否存在,而在于它引用的外部符号在运行时找不到。

建议的解决方案:

  1. 统一编译版本:这是最关键的一步。请确保您编译 component_driversbmc_sdkConan 依赖版本,与您在 manifest 中用于整包编译的版本完全一致。社区专家 xuhaijun河南昆仑-郑豪伟 都曾指出,SDK 版本不匹配是导致构建和运行时问题的常见根因。请使用 Manifest 对应分支(如 br_release_openUBMC2509_20251230)指定的 bmc_sdk 进行初始化。
  2. 检查 Manifest 中的依赖声明:检查 manifest.yml 文件中 component_drivers 组件的依赖声明,特别是对 libmc4lua 等核心库的版本约束。确保其版本范围与您期望的一致。上下文提供了核心依赖的版本解析示例,您可以作为参考:
    libmc4lua/[>=1.0.0]@openubmc/stable: libmc4lua/1.90.92@openubmc/stable
    
    如果 manifest.yml 中锁定的版本是 1.90.92,但您在本地构建 component_drivers 时链接到了一个不同版本的 libmc4lua,就会出现您遇到的符号缺失问题。
  3. 清理并重新构建
    • 清理本地 Conan 缓存中与 component_drivers 相关的包,强制其在下一次整包编译时重新构建。您可以使用 conan remove "component_drivers/*" 或类似命令。
    • 完全删除 manifest 目录下的 buildtemp 等构建产物目录,然后重新执行 bingo build。这能确保所有组件都基于同一套依赖配置进行重建。
  4. 分析符号来源:作为更高级的调试手段,您可以在本地环境中找到提供 process_property_value_variant 符号的 .so 文件。使用 nm -D <库文件.so> | grep "process_property_value_variant" 命令确认。然后检查该文件是否被正确打包到了您的固件包中,以及其版本是否与 component_drivers 编译时使用的版本一致。

总结

您遇到的问题可以分为编译和运行两个阶段。编译阶段的 lua 未找到问题指向了构建环境初始化的不一致;而运行时的 undefined symbol 问题则是一个典型的 ABI 兼容性问题,核心原因是 component_drivers 在子编译和整包编译时链接到了不兼容的依赖库版本

最推荐的解决方案是: 完全依赖 bingo build 的完整流程,并确保用于初始化环境的 bmc_sdk 版本与您 Manifest 目标分支(OpenUBMC2603)严格匹配。在修改驱动后,建议进行完整的清理(包括 Conan 缓存)和重构建,以避免本地缓存导致版本混用。

可以尝试一下clone libmcpp和 clone devmon。把这两个库也编译一下,然后修改一下manifest中libmcpp和devmon的版本。

我试了下,lua问题还是有,不过驱动至少可以加载了虽然不稳定,可能是我fork的component_driver组件落后了?我重新对齐下再试试

还是不行,我考虑把docker重新创建一下试试

可以把编译过程和编译的component_drivers,libmcpp,devmon版本发出来看看,这三个版本最好都是最新的。

下载一个sdk放到manifest库下。cd manifest
python3 init.py -path <bmc_sdk.zip文件路径> -user <openUBMC社区用户名> -psw <openUBMC社区用户密码>。重新初始化一下环境

确实是因为版本问题,libmcpp更新了lua依赖为luajit,我下载了最新的component_drivers、libmcpp、devmon,安装luajit之后解决了,感谢

请问可以手动配置component_drivers组件的subprojects下的libmcpp版本吗?最新版本会导致烧录到开发板后网卡驱动异常,我想降级到旧版测试下,但component_drivers会自动更新subprojects

可以,component_drivers/subprojects/libmcpp.wrap,

[wrap-git]
url = git@gitcode.com:openUBMC/libmcpp.git
revision = 1.2.67
depth = 1

[provide]
libmcpp = libmcpp_deps

改了这个最好把manfiest中的libmcpp版本也改了,不然大概率也是有的问题。

我尝试了下,但实际的libmcpp和配置的版本不一致?之前已经清空subproject了,后续出包烧录报错:error: /opt/bmc/apps/devmon/devmon: undefined symbol: _ZN2mc6engine26property_processor_factory30process_property_value_variantEPNS0_15property_helperERKNS_12variant_baseE,应该也是版本不一致导致的吧?

问题已解决