Bluefiled DPU中的ipmi是如何模拟实现的?为什么不支持ipmitool?(ipmi_sim、/etc/ipmi/mlx-bf.lan.conf、/etc/ipmi/mlx-bf.emu)

关键命令

cat /var/emu_param/bluefield_temp
cat /var/emu_param/fw_info
cat /var/emu_param/nic_pci_dev_info

-c路径是:`/etc/ipmi/mlx-bf.lan.conf`
-f路径是:`/etc/ipmi/mlx-bf.emu`

背景

普通服务器可以通过IPMI进行管理,IPMI依赖专门的硬件BMC提供。在DPU上使用ipmi_sim来模拟IPMI行为。
对于Bluefield DPU通过ipmitool远程登录管理一直报错不支持。应该就是没有ipmi的专门硬件,仅仅通过sim的方式,然后在内核态运行ko提供功能查询支持。

基础介绍

ipmi_sim 是一个IPMI(Intelligent Platform Management Interface,智能平台管理接口)模拟器。它能够模拟BMC(Baseboard Management Controller,基板管理控制器)的行为,允许用户在没有物理硬件的情况下测试和开发IPMI相关的软件和脚本。

在BF2和BF3都存在一个特殊的守护进程ipmi_sim:<

interface_vdisp = enable INTERFACE_VENC = y config_mi_venc = y mi_venc_kapi = no interface_venc = enable INTERFACE_VIF = y config_mi_vif = y mi_vif_kapi = no VIF_DEBUG_IF = y DRV_VIF_LOG_LEVEL = 2 interface_vif = enable INTERFACE_SCL = y mi_scl_kapi = no config_mi_scl = y MHAL_VPE = y mhal_vpe = enable interface_scl = enable interface_wlan = disable interface_pcie = disable interface_dsp = disable interface_dpu = disable INTERFACE_DUMMY = y interface_dummy = enable INTERFACE_FB = y MI_FB_KAPI = y mi_fb_kapi = yes MI_FB_NORMAL = y interface_fb = enable interface_nir = disable interface_hvp = disable interface_pspi = disable interface_hdmirx = disable osdk_drm = disable NORMAL_BOOT = y SECURE_BOOT = normal_boot ARCH=arm CROSS_COMPILE=arm-sigmastar-linux-uclibcgnueabihf-9.1.0- PYTHON=python3 CHIP_FULL_NAME = iford CHIP_ALIAS = iford PREFIX =$(TOOLCHAIN_REL)- AS = $(PREFIX)as CC = $(PREFIX)gcc CXX = $(PREFIX)g++ CPP = $(PREFIX)cpp LD = $(PREFIX)ld AR = $(PREFIX)ar STRIP = $(PREFIX)strip OBJCOPY = $(PREFIX)objcopy OBJDUMP = $(PREFIX)objdump export ARCH CROSS_COMPILE export PATH=/tools/bin/:/tools/toolchain/arm-sigmastar-linux-uclibcgnueabihf-9.1.0/bin:/home/tp/bin:/home/tp/.local/bin:/usr/local/git/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/tools/toolchain/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/bin CLANG_TIDY = /home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/project/tools/clang-13/clang-tidy CLANG_FORMAT = /home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/project/tools/clang-13/clang-format export CLANG_TIDY CLANG_FORMAT KERNEL_ROOT = /home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/project/../kernel CUR_KERNEL_VERSION = 5.10.117 ALKAID_MHAL_UT = 0 KERNEL_LX_MEM = LX_MEM=0x8000000 KERNEL_RESERVED_CMA = cma=2M KERNEL_RESERVED_MMA = mma_heap=mma_heap_name0,miu=0,sz=0x4000000 mma_memblock_remove=1 UBOOT_ORIGIN_CONFIG = iford_defconfig KERNEL_BOOT_ENV = LX_MEM=0x8000000 mma_heap=mma_heap_name0,miu=0,sz=0x4000000 mma_memblock_remove=1 cma=2M PROJECT_DEFCONFIG=ipc_iford.nor.uclibc-9.1.0-squashfs.ssz029c.128.qfn128_ddr3_demo_aov_defconfig make symbol_link make[1]: Entering directory '/home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/project' ln -sf /home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/project/../kernel/modules /home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/project/kbuild/5.10/ ln -sf /home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/project/../kernel/arch /home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/project/kbuild/5.10/ ln -sf /home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/project/../kernel/drivers /home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/project/kbuild/5.10/ ln -sf /home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/project/../kernel/include /home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/project/kbuild/5.10/ ln -sf /home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/project/../kernel/scripts /home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/project/kbuild/5.10/ ln -sf /home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/project/../kernel/usr /home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/project/kbuild/5.10/ ln -sf /home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/project/../kernel/Makefile /home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/project/kbuild/5.10/ ln -sf /home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/project/../kernel/Module.symvers /home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/project/kbuild/5.10/ ln -sf /home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/project/../kernel/.sstar_chip.txt /home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/project/kbuild/5.10/ ln -sf /home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/project/../kernel/.config /home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/project/kbuild/5.10/ ln -snf /home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/project/kbuild/customize/5.10/iford/ipc /home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/project/kbuild/5.10/customize make[1]: Leaving directory '/home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/project' make boot make[1]: Entering directory '/home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/project' building uboot... boot-config: "iford_defconfig.alkaid_defconfig" make[2]: Entering directory '/home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/boot' Check Kconfigs for no newline at the end... Extract CHIP NAME (iford) to '.sstar_chip.txt' make[3]: Entering directory '/home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/boot' HOSTCC scripts/basic/fixdep HOSTCC scripts/kconfig/conf.o YACC scripts/kconfig/zconf.tab.c LEX scripts/kconfig/zconf.lex.c HOSTCC scripts/kconfig/zconf.tab.o HOSTLD scripts/kconfig/conf sh: ./scripts/gcc-version.sh: 权限不够 sh: ./scripts/gcc-version.sh: 权限不够 Kconfig:66: syntax error Kconfig:65: invalid option sh: ./scripts/clang-version.sh: 权限不够 Kconfig:74: syntax error Kconfig:73: invalid option scripts/kconfig/Makefile:96: recipe for target 'iford_defconfig.alkaid_defconfig' failed make[4]: *** [iford_defconfig.alkaid_defconfig] Error 1 Makefile:577: recipe for target 'iford_defconfig.alkaid_defconfig' failed make[3]: *** [iford_defconfig.alkaid_defconfig] Error 2 make[3]: Leaving directory '/home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/boot' makefile:25: recipe for target 'iford_defconfig.alkaid_defconfig' failed make[2]: *** [iford_defconfig.alkaid_defconfig] Error 2 make[2]: Leaving directory '/home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/boot' make[2]: Entering directory '/home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/boot' make[3]: Entering directory '/home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/boot' scripts/kconfig/conf --syncconfig Kconfig sh: ./scripts/gcc-version.sh: 权限不够 sh: ./scripts/gcc-version.sh: 权限不够 Kconfig:66: syntax error Kconfig:65: invalid option sh: ./scripts/clang-version.sh: 权限不够 Kconfig:74: syntax error Kconfig:73: invalid option scripts/kconfig/Makefile:75: recipe for target 'syncconfig' failed make[5]: *** [syncconfig] Error 1 Makefile:577: recipe for target 'syncconfig' failed make[4]: *** [syncconfig] Error 2 make[3]: *** No rule to make target 'include/config/auto.conf', needed by 'include/config/uboot.release'。 停止。 make[3]: *** 正在等待未完成的任务.... ===================== WARNING ====================== This board does not use CONFIG_DM_ETH (Driver Model for Ethernet drivers). Please update the board to use CONFIG_DM_ETH before the v2020.07 release. Failure to update by the deadline may result in board removal. See doc/driver-model/migration.rst for more info. ==================================================== make[3]: Leaving directory '/home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/boot' makefile:33: recipe for target 'GNUmakefile' failed make[2]: *** [GNUmakefile] Error 2 make[2]: Leaving directory '/home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/boot' board/uboot/uboot.mk:26: recipe for target 'boot' failed make[1]: *** [boot] Error 1 make[1]: Leaving directory '/home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/project' makefile:68: recipe for target 'image' failed make: *** [image] Error 2
最新发布
09-24
<think>好的,我现在需要帮助用户解决他们在编译嵌入式项目时遇到的问题。用户提供的错误信息显示在执行`make`命令时出现了多个权限问题和语法错误,特别是在处理U-Boot配置时。首先,我需要仔细分析错误信息,找出根本原因,并给出相应的解决方案。 首先,用户提供的错误输出中有几个关键点: 1. `sh: ./scripts/gcc-version.sh: 权限不够`:这说明`gcc-version.sh`脚本没有执行权限。 2. `Kconfig:66: syntax error` 和 `Kconfig:65: invalid option`:这可能表明Kconfig文件存在语法错误,或者某些配置选项不正确。 3. `sh: ./scripts/clang-version.sh: 权限不够`:同样,`clang-version.sh`脚本也没有执行权限。 4. 最后,`make`无法找到`include/config/auto.conf`,导致无法继续构建。 接下来,我需要逐一分析这些错误的可能原因。 首先,权限问题。用户之前已经遇到过权限不足的问题,并通过`chmod +x`解决了部分脚本的问题。但这次错误中,`scripts/gcc-version.sh`和`scripts/clang-version.sh`仍然缺少执行权限。这可能是因为用户虽然修复了部分脚本,但没有检查所有必要的脚本,或者在修复权限后又重新生成了这些文件,导致权限重置。 其次,Kconfig的语法错误。这可能是因为Kconfig文件本身存在错误,或者某些配置选项引用了不存在的变量,或者由于脚本无法正确执行(如权限问题)导致解析失败,进而引发语法错误。例如,如果`gcc-version.sh`无法执行,可能无法正确获取GCC版本,导致Kconfig中的条件判断失败,出现语法错误。 另外,`include/config/auto.conf`缺失的问题可能是由于之前的配置步骤失败,导致该文件未被生成。用户需要确保在执行后续步骤之前,配置步骤成功完成。 接下来,我需要考虑解决方案: 1. **修复脚本权限**:检查并确保所有相关的脚本(如`scripts/gcc-version.sh`、`scripts/clang-version.sh`)都具有执行权限。可以使用`chmod +x`命令添加执行权限。 2. **检查Kconfig文件**:查看Kconfig文件中是否存在语法错误。用户提到的错误位于第66行和第74行附近,可能需要检查这些位置是否有拼写错误、未闭合的条件语句,或者引用了不存在的变量。 3. **验证工具版本**:`gcc-version.sh`和`clang-version.sh`可能用于检查编译器版本是否符合要求。如果这些脚本无法执行,可能会导致版本检查失败,从而引发Kconfig错误。修复权限问题后,重新运行配置步骤可能会解决这个问题。 4. **清理并重新配置**:如果权限问题修复后仍然存在Kconfig错误,可能需要清理之前的构建结果并重新配置。使用`make clean`或删除相关配置文件后重新运行`make defconfig`。 5. **检查依赖项**:确保所有依赖的工具和库都已正确安装,例如`flex`、`bison`等,这些工具在解析Kconfig文件时可能用到。 此外,用户之前遇到过`clang-format`版本不匹配的问题,可能需要确保所有工具链的版本符合项目要求,否则可能导致配置失败。 在整理这些思路后,我需要将解决方案分步骤说明,并确保用户能够逐步操作,同时提供相关的扩展问题,帮助用户深入理解问题根源和预防措施。</think>问题出现在构建 U-Boot 配置阶段,核心错误信息为: ``` sh: ./scripts/gcc-version.sh: 权限不够 sh: ./scripts/clang-version.sh: 权限不够 Kconfig:66: syntax error Kconfig:65: invalid option ``` --- ### 原因分析 1. **脚本执行权限不足** `scripts/gcc-version.sh` 和 `scripts/clang-version.sh` 缺少执行权限(`x`),导致 Kconfig 解析失败。 2. **Kconfig 文件语法错误** - 权限问题导致脚本无法获取编译器版本,触发 Kconfig 条件判断失败。 - Kconfig 文件中可能存在语法错误(如未闭合的 `if`、拼写错误等)。 3. **依赖文件未生成** `include/config/auto.conf` 未生成,通常因配置阶段失败导致。 --- ### 解决方案 1. **修复脚本权限问题** ```bash # 为 gcc-version.sh 和 clang-version.sh 添加执行权限 chmod +x /home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/boot/scripts/{gcc-version.sh,clang-version.sh} ``` 2. **验证 Kconfig 文件语法** - 检查 `Kconfig` 文件第 66 行和 74 行附近的语法: ```bash vim /home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/boot/Kconfig ``` - 重点检查: - `if`/`endif` 是否闭合 - `option` 是否拼写错误 - 变量引用是否正确(如 `CONFIG_DM_ETH`) 3. **清理并重新配置** ```bash # 清理旧的构建结果 make -C /home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/boot distclean # 重新生成配置 make -C /home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/boot iford_defconfig.alkaid_defconfig ``` 4. **检查工具链依赖** - 确保 `flex`、`bison` 等工具已安装: ```bash sudo apt install flex bison ``` 5. **强制生成 auto.conf(如果缺失)** ```bash # 手动创建 auto.conf(若仍失败) mkdir -p /home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/boot/include/config touch /home/tp/Project/Iford_IMD00V5.1.1/Iford_IMD00V5.1.1_defconfig/SourceCode/boot/include/config/auto.conf ``` --- ### 相关问题 1. 如何排查 Kconfig 文件中的语法错误? 2. 为什么缺少 `auto.conf` 会导致编译失败? 3. 如何手动修复 U-Boot 的 `defconfig` 文件? 4. 编译嵌入式项目时,如何确保所有依赖工具链已安装? 5. 如何通过 `make distclean` 彻底清理构建残留?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值