系统出现(NULL net_device):edma: edma_host_send_msg错误信息

问题描述

设备进入系统后出现(NULL net_device): edma: edma_host_send_msg错误日志信息

环境信息

  • 操作系统:[root@localhost ~]# uname -a
    Linux localhost 5.10.0-216.0.0.115.oe2203sp4.aarch64 #1 SMP Thu Jun 27 15:22:10 CST 2024 aarch64 aarch64 aarch64 GNU/Linux
    [root@localhost ~]#

  • 软件版本:OpenUBMC25.12.02SP2

  • 硬件配置:[root@localhost ~]# lscpu
    Architecture: aarch64
    CPU op-mode(s): 64-bit
    Byte Order: Little Endian
    CPU(s): 64
    On-line CPU(s) list: 0-63
    Vendor ID: HiSilicon
    BIOS Vendor ID: HiSilicon
    Model name: Kunpeng-920
    BIOS Model name: HUAWEI Kunpeng 920 5220
    Model: 0
    Thread(s) per core: 1
    Core(s) per socket: 32
    Socket(s): 2
    Stepping: 0x1
    BogoMIPS: 200.00
    Flags: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma dcpop asimddp asimdfhm ssbs
    Caches (sum of all):
    L1d: 4 MiB (64 instances)
    L1i: 4 MiB (64 instances)
    L2: 32 MiB (64 instances)
    L3: 64 MiB (2 instances)
    NUMA:
    NUMA node(s): 2
    NUMA node0 CPU(s): 0-31
    NUMA node1 CPU(s): 32-63
    Vulnerabilities:
    Gather data sampling: Not affected
    Itlb multihit: Not affected
    L1tf: Not affected
    Mds: Not affected
    Meltdown: Not affected
    Mmio stale data: Not affected
    Retbleed: Not affected
    Spec rstack overflow: Not affected
    Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl
    Spectre v1: Mitigation; __user pointer sanitization
    Spectre v2: Not affected
    Srbds: Not affected
    Tsx async abort: Not affected
    [root@localhost ~]#

重现步骤

1、设备开机进入系统,查看dmesg日志信息

2、设备开机进入系统,在BMC KVM界面查看显示信息
3、通过串口连接设备,查看基本信息

期望结果

1、dmesg日志中无异常信息
2、KVM中不会弹出 edma: edma_host_send_msg错误日志信息
3、串口输出信息中不会弹出 edma: edma_host_send_msg错误日志信息

实际结果

1、dmesg日志中出现(NULL net_device): edma: edma_host_send_msg错误日志信息
2、KVM中弹出 edma: edma_host_send_msg错误日志信息
3、串口输出信息中会弹出 edma: edma_host_send_msg错误日志信息

尝试过的解决方案

卸载iBMA然后./install.sh -s --enable-iBMA_https=true重新安装iBMA。

分析结论

1、打印信息来自iBMA;

2、停止掉iBMA服务后打印信息没有了;

答案内容由AI生成,仅供参考:

结论

根本原因:iBMA 驱动与当前 openEuler 22.03 SP4 内核版本不兼容,导致 edma 通道初始化失败,iBMA 获取不到有效的网络设备,进而抛出 NULL net_device 错误。

推荐解决方案

  1. 升级操作系统至 openEuler 24.03 LTS SP3,并重新安装 iBMA;
  2. 或编译对应内核版本的 iBMA 驱动并手动安装;
  3. 完成后重启 iBMA 服务,并检查 edma 驱动和 veth 接口状态。

若问题依旧存在,请提供 iBMA 日志和 BMC 一键收集日志,以便进一步定位。

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

根据您提供的错误信息 (NULL net_device): edma: edma_host_send_msg,结合上下文知识库内容,以下是对该问题的综合分析及排查建议。


问题原因分析

  1. 错误来源
    您已验证该打印信息来自 iBMA(Intelligent Baseboard Management Agent),且停止 iBMA 服务后错误消失。这表明 iBMA 在尝试通过 edma 通道发送消息时,传入了一个空指针(NULL net_device),导致内核打印该错误。

  2. edma 通道依赖

    • edma 是 iBMA 与 BMC 之间带内通信的关键通道。根据文档,edma 驱动host_edma_drvhost_cdev_drv)需要在 OS 侧和 BMC 侧均正常加载,且对应的设备文件 /dev/hwibmc 必须存在(参考 搜索结果的第1条)。
    • 如果 edma 驱动未正确加载,或与 iBMA 版本不匹配,就会导致 iBMA 无法获取有效的网络设备对象,从而出现 NULL net_device 错误。
  3. 版本与系统兼容性
    您使用的环境为:

    • OS: openEuler 22.03 SP4(内核 5.10.0-216)
    • 软件版本: OpenUBMC 25.12.02 SP2
    • 硬件: 鲲鹏 920

    根据 文档块2,iBMA 软件包的驱动仅携带了特定 OS 版本(如 openEuler 24.03 LTS SP2)的驱动。在 openEuler 22.03 SP4 上,系统可能自带版本较低的 iBMA 驱动(如 0.3.6),该驱动无法正常加载,导致 iBMA 服务启动失败或功能异常。您当前的错误很可能正是由于 iBMA 驱动无法匹配当前 OS 内核,造成 edma 设备初始化失败。

  4. 驱动与网络设备关联
    上下文知识库中提及:iBMA 依赖 PCIe 设备来建立与 BMC 的通信,且 iBMA 使用 veth 虚拟网口(host_veth_drv.ko)进行数据交互。若 veth 驱动未加载或与 edma 冲突,也可能导致 net_device 为 NULL。


排查建议

1. 检查驱动加载状态

在 OS 侧和 BMC 侧均执行以下命令,确认 edma 和 veth 驱动是否正常加载:

lsmod | grep edma
lsmod | grep veth
modprobe host_edma_drv   # 尝试手动加载
modprobe host_veth_drv

同时检查对应的设备文件是否存在:

ls /dev | grep hwibmc

2. 查看 iBMA 详细日志

收集 iBMA 的日志文件(位于 /opt/huawei/ibma/log//var/log/ibma/)和 BMC 一键收集日志,搜索关键字 edma_host_send_msgnet_device,定位具体调用栈。

对于 iBMA 日志收集,可参考文档中的命令:

tar -czf ibma_log.tar.gz /opt/huawei/ibma/log/

3. 确认 iBMA 版本与 OS 兼容性

根据您的 OS 版本(openEuler 22.03 SP4),请检查 iBMA 软件包中是否包含对应 OS 的驱动(iBMA2.0/drivers/openEuler/ 目录下是否存在匹配内核版本的 .rpm 包)。若不存在,建议:

  • 升级 OS 至 iBMA 软件包支持的版本(如 openEuler 24.03 LTS SP3,参考文档块2);
  • 手动编译驱动:通过 iBMA 驱动源码包编译 kmod-iBMA_driver-xxx.rpm 并安装,然后重启 iBMA 服务。

命令参考:

rpm -ivh kmod-iBMA_driver-xxx.rpm
systemctl restart iBMA.service

4. 验证 veth 接口状态

确保虚拟网口 veth 已正确创建:

ifconfig veth

若不存在,则需先加载 veth 内核模块:

modprobe veth
insmod /opt/huawei/ibma/driver/host_veth_drv.ko

5. 临时规避与系统性修复

  • 临时规避:停止 iBMA 服务可消除错误打印,但会丢失带内管理能力。
  • 系统性修复:参考 文档块4(IPMI管理定位问题),确保 edma 服务启动时无设备占用冲突。该文档提到:edma 服务启动打开四个字符设备,若 telnetd 等进程占用了相关设备,需在重启 BMC 前 killall busybox_x 以释放依赖。

结论

根本原因:iBMA 驱动与当前 openEuler 22.03 SP4 内核版本不兼容,导致 edma 通道初始化失败,iBMA 获取不到有效的网络设备,进而抛出 NULL net_device 错误。

推荐解决方案

  1. 升级操作系统至 openEuler 24.03 LTS SP3,并重新安装 iBMA;
  2. 或编译对应内核版本的 iBMA 驱动并手动安装;
  3. 完成后重启 iBMA 服务,并检查 edma 驱动和 veth 接口状态。

若问题依旧存在,请提供 iBMA 日志和 BMC 一键收集日志,以便进一步定位。

找到了一篇以前的帖子,可供参考: 安装iBMA后ubmc的首页没有上传cpu和内存信息 - #25,来自 zhouzijia

这里的打印是BMA向BMC发送ipmi请求,BMC没有及时给BMA返回请求结果导致的

定位的操作步骤:

在BMC后台发送 `mdbctl traceipmi start file edma` ,命令结果会输出到/tmp/ipmi.txt文件

image

在BMC后台的/tmp/ipmi.txt里可以看到命令的收发

image