常见错误处理

驱动安装

  • Ubuntu 驱动安装失败并提示 DKMS 记录缺失

    Ubuntu系统驱动安装过程中出现下面错误信息:

    Error! The module/version combo: xh2_driver-0.3.0:added is not located in the DKMS tree.
    

    原因:

    系统中残留了旧版本驱动或 DKMS 缓存,导致当前驱动版本无法正确注册。

    解决方法:

    请按以下步骤卸载旧驱动并清除 DKMS 记录,再重新安装驱动:

    sudo ./houmo_drv_<target_hw>_<release>__${distro}_$arch.run unstall all
    sudo dkms remove xh2_driver/<release>
    sudo ./houmo_drv_<target_hw>_<release>__${distro}_$arch.run install all --path <PATH>
    

    其中:

    • <target_hw> 表示后摩芯片类型。

    • <release> 表示系统软件包版本号。

    • ${distro} 表示ubuntu2004或ubuntu2404。

    • $arch 表示x86_64或aarch64。

    • PATH 应替换为驱动安装路径。如果不指定 --path <PATH>, 则驱动默认安装在 /usr/local/houmo-sdk 目录下。

  • Ubuntu 驱动安装失败并提示 pci_alloc_irq_vectors failed

    Ubuntu系统驱动安装过程中,dmesg 报错 pci_alloc_irq_vectors failed -28

    原因1:

    后摩设备已经下线,但内核未及时更新 PCI 设备信息,导致驱动在分配中断向量时失败。

    判断方法:

    检查后摩设备状态:

    lspci -s BB:DD.F -vvv
    

    其中,BB:DD.F 为后摩设备PCIe BDF信息。如果返回下面信息,说明后摩设备信息未更新。

    03:00.0 Memory controller: Device 1f6b:0c00 (rev ff) (prog-if ff)
            !!! Unknown header type 7f
            Kernel modules: xh2a_drv
    

    解决方法:

    执行下面步骤:

    1. 卸载驱动

    2. 重新扫描后摩设备,指令示例如下:

    echo 1 | sudo tee /sys/bus/pci/devices/<pcie_bdf>/remove
    echo 1 | sudo tee /sys/bus/pci/rescan
    

    其中,<pcie_bdf> 为上级PCI设备的BDF,如 0000\:00\:07.0

    1. 重启主机。

    原因2:

    若上述原因已排除,但问题仍然存在,则可能是当前主机配置不支持分配多个MSI中断,请检查主机BIOS设置。

    解决方法:

    • X86_64平台:

      检查BIOS/UEFI 配置,确保平台 IOMMU 功能已启用。不同厂商命名可能为 VT-d、AMD VT、IO Virtualization 或 IOMMU等名称呈现。

      常见平台配置示例:

      • 部分海光平台主机:IOMMU 的配置项位于 Chipset -> NBIO -> IOMMU,请将其设置为启用。

      • 另一类海光平台主机:IOMMU的配置可能位于 Hygon CBS 菜单下,请确认相关选项已启用。

      • AMD和海光处理器:可通过检查系统中是否存在 ACPI IVRS 表来辅助判断 IOMMU 是否启用:

        ls /sys/firmware/acpi/tables/IVRS
        

        若该文件存在,通常表示 BIOS 中已正确开启 IOMMU;若不存在,则可能未在 BIOS 中启用 IOMMU。

      • 百敖通用BIOS:在 BIOS 菜单中查找 IO VirtualizationIOV Support 相关选项,将该选项设置为启用。

      • 百敖开天专用BIOS:将附件拷贝到目标主机,解压附件后进入目录,使用root权限执行下面命令:

        ./mfgdone.sh -clr
        

        重启系统,按 F1 进BIOS Setup,进入 高级 菜单,按 Ctr+Z 调出 CRB 菜单,设置 IOV Support 选项为启用。

    • ARM平台:

      请根据实际平台确认GIC/ITS或中断重映射功能已启用。

  • Ubuntu 22.04 驱动安装失败并提示 DKMS 编译失败

    在Ubuntu 22.04 x86_64平台上安装驱动过程中,可能出现下面错误信息:

    ERROR (dkms apport): binary package for xh2_driver: v1.1.0 not found
    Error! Bad return status for module build on kernel: 6.8.0-101-generic (x86_64)
    Consult /var/lib/dkms/xh2 driver/v1.1.0/build/make.logformore information.
    

    原因:

    • 当前系统缺少与内核版本匹配的 GCC 编译器。

    • 驱动模块通过 DKMS 编译时,需要使用系统默认 GCC 版本与内核编译器版本一致,否则会导致编译失败。

    解决方法:

    1. 安装 GCC 12(确保与内核版本兼容):

      sudo apt update
      sudo apt install gcc-12 g++-12
      
    2. 验证GCC版本:

      gcc --version
      
    3. 将 GCC 12设置为默认编译器:

      sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 100
      sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 100
      sudo update-alternatives --config gcc
      sudo update-alternatives --config g++
      
    4. 安装驱动

固件镜像升级

  • Linux 升级固件镜像失败并提示 Qt xcb 插件加载失败

    在 Linux 主机端升级固件镜像时,出现下面错误信息:

    From 6.5.0, xcb-cursor0 or libxcb-cursore
    is needed
    to load the Qt xcb platform plugin.
    Could not load the Qt platform plugin"xcb" in ""even
    though it was found.
    

    原因

    主机环境缺少依赖库 libxcb-cursor0,导致 Qt 无法正确加载 xcb 平台插件。

    解决方法:

    1. 在主机端执行以下命令安装依赖库:

    sudo apt-get install libxcb-cursor0
    
    1. 重新升级固件镜像。

  • 切换账号后运行 GUI 升级工具失败并提示 X11 认证错误

    在 Linux 主机端使用 GUI 界面方式升级固件镜像时,如果先通过 su 切换到其他账号,再执行 M50_Upgrader_GUI,返回下面错误:

    X11 connection rejected because of wrong authentication
    

    原因

    X11认证信息(.Xauthority 文件)未正确传递到切换后的账号。

    解决方法:

    暂不支持在切换账号后使用 GUI 升级工具。需直接使用当前登录账号运行 M50_Upgrader_GUI

  • GUI 升级固件镜像失败并提示inspect模块缺失

    使用GUI界面方式升级固件镜像时,如果出现以下错误:

    No module named 'inspect'
    

    原因

    运行环境中的 GNU C Library 版本过低,导致 GUI 程序依赖的 Python 模块无法正常加载。

    解决方法:

    系统的 GNU C Library 版本不低于 2.28。

  • 命令行升级固件镜像失败并提示设备节点打开失败

    使用命令行方式升级固件镜像时,如果出现以下错误:

    (53 hm_errcode)last error: No such file or directory
    (55 xh2a_sys_opeen)/dev/xh2a_system_device0 open failed
    dev 0xh2a_sys_openfailed
    can not read device 0 dual backup status, default disabled
    device 0 start to upgrade fsbl, address:0x00042000, length:0x0003e000 bytes
    (53 hm_errcode)last error: No such file or directory
    (776 xh2a_memory_allocator_open)/dev/xh2a_memory_allocator_deviceo_ddr open fail
    

    原因:

    可能是当前主机配置不支持分配多个MSI中断,请检查主机BIOS设置。

    解决方法:

    • X86_64平台:

      检查BIOS/UEFI 配置,确保平台 IOMMU 功能已开启。不同厂商命名可能为 VT-d、AMD VT、IO Virtualization 或 IOMMU等名称呈现。

      例如,在部分 海光平台主机中,IOMMU 的配置项位于 Chipset -> NBIO -> IOMMU,而另一类海光平台主机中,IOMMU的配置可能位于 Hygon CBS 菜单下。对于AMD和海光处理器,还可以在 Linux 中检查是否存在 IVRS 表项,用于辅助判断 IOMMU 是否正确启用。如果系统中不存在 /sys/firmware/acpi/tables/IVRS 文件,则表明BIOS中未正确开启IOMMU。

    • ARM平台:

      请根据实际平台确认GIC/ITS或中断重映射功能已启用。

SMI工具

  • 多芯片场景下SMI查询设备信息时提示I2C read failed

    如果当前后摩设备上有多颗后摩M50芯片,即有多个后摩逻辑设备,当执行 hm_smi -a 查看所有后摩设备信息时,返回下面错误:

     E/      [2025-09-24 04:09:53 pid:6502 tid:6504] (53 hm_errcode)last error: Invalid argument
     E/HMI2C [2025-09-24 04:09:53 pid:6502 tid:6504] (163 xh2a_i2c_read)I2C read failed on fd 5, bus 2
    
    **解决方法:**
    
    忽略错误信息。
    
  • Linux运行SMI工具失败并提示command not found

    在Linux系统环境下,运行SMI指令返回下面错误信息:

     bash: hm_smi: command not found
    
    **原因:**
    
    可能是驱动安装过程中,由于其他用户意外修改了 ``~/.bashrc`` 文件,导致当前终端中的 ``PATH`` 环境变量中SMI工具所在路径不对。
    
    **解决方法:**
    
    1. 在 ``~/.bashrc`` 文件末尾添加 SMI 工具路径,示例如下:
    
       ::
    
         export PATH=/usr/local/houmo-sdk/tools:${PATH}
    
    2. 重新加载 ~/.bashrc 文件:
    
       ::
    
         source ~/.bashrc
    

模型推理

  • 使用C++推理时出现如下错误信息:

    error: use of deleted function 'tcim::Tensor::Tensor()
    

    原因:

    由于 tcim::Tensor 类没有默认构造函数,通过默认构造方式创建对象会引发此编译错误。同时也要避免隐式使用默认构造函数的操作,如避免通过 [] 操作符访问map等容器的元素。

    解决方法:

    使用map的 insertat 等显示访问方法tensor。示例如下:

    注意

    建议参照下面示例使用 input_map.at("input.1"),不能使用 input_map["input.1"]
    ImageProc::I420To420sp((uint8_t *)input_map.at("input.1").Data(), (uint8_t *)img_yuv.data, size);
    
  • 推理时出现如下错误信息:

    Check failed: (lib_handle_ != nullptr) is false: Failed to load dynamic shared library tcim_resnet50.so tcim_resnet50.so: cannot open shared object file: No such file or directory
    

    原因:

    根据上面错误信息,TCIM找不到合适的 resnet50.hmm 文件导致二进制模型文件加载失败。

    解决方法:

    1. 需要确认二进制模型文件是否存在。

    2. 模型文件架构是否与目标机器匹配,如使用 readelf -h file_name 查看模型文件架构是X86还是AArch64架构。

  • 使用C++推理时返回 NOT_FOUND 错误码,并返回以下错误信息:

    xxx error, module not exist
    

    原因:

    二进制模型文件未初始化。

    解决方法:

    初始化二进制模型文件。可通过以下任意方法初始化二进制模型文件:

    • 通过静态方法 Module::LoadFromFile。示例如下:

      auto module = Module::LoadFromFile("tcim_resnet50.hmm");
      
    • 通过有参的构造函数 Module::Module,示例如下:

      Module("tcim_resnet50.hmm");
      
    • 使用默认构造函数,再调用 Module::LoadModel 方法加载二进制模型文件,示例如下:

      Module module;
      module.LoadModel("tcim_resnet50.hmm");
      

    示例中 resnet50.hmm 为二进制模型文件名。

    API详情参看《后摩大道® TCIM开发者手册》。

  • 在多线程推理场景下,模型推理可能失败,返回 Interrupted system callBad file descriptor 等错误信息。

    原因:

    当主机进入系统级睡眠或休眠状态时,后摩设备相关操作会受到影响。在多线程推理过程中,如果系统发生睡眠或从睡眠状态唤醒,推理相关的设备访问可能中断,从而导致推理失败。

    解决方法:

    请确保运行推理任务的主机关闭自动睡眠或休眠功能,避免在推理过程中进入睡眠状态。

    • Windows系统

      设置 -> 系统 -> 电源和电池 -> 屏幕和睡眠 中,将 睡眠 相关选项设置为 从不,确保系统在推理过程中不会自动进入睡眠状态。

    • Linux系统

      • 禁用系统休眠: sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target

      • 恢复系统休眠: sudo systemctl unmask sleep.target suspend.target hibernate.target hybrid-sleep.target

      • 查看当前状态: systemctl status sleep.target suspend.target hibernate.target hybrid-sleep.target