常见错误处理
驱动安装
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解决方法:
执行下面步骤:
卸载驱动。
重新扫描后摩设备,指令示例如下:
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。重启主机。
原因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 Virtualization 或 IOV 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 版本与内核编译器版本一致,否则会导致编译失败。
解决方法:
安装 GCC 12(确保与内核版本兼容):
sudo apt update sudo apt install gcc-12 g++-12
验证GCC版本:
gcc --version
将 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++
安装驱动。
固件镜像升级
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 平台插件。
解决方法:
在主机端执行以下命令安装依赖库:
sudo apt-get install libxcb-cursor0
重新升级固件镜像。
切换账号后运行 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的
insert和at等显示访问方法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文件导致二进制模型文件加载失败。解决方法:
需要确认二进制模型文件是否存在。
模型文件架构是否与目标机器匹配,如使用
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 call或Bad 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