设备检测与升级验证
本节用于在完成驱动安装和固件升级后,通过示例程序验证设备驱动与固件是否正常加载,并获取设备基础信息与运行状态。
执行以下步骤进行升级检查:
- 在主机端创建
device_check文件夹:
mkdir -p device_check
- 复制设备信息获取示例源码到
device_check目录下。设备信息获取可直接使用后摩提供的hm_sys_info_examples.c示例代码。
cd /path/to/houmo-drv-xh2/hal/export/samples
scp hm_sys_info_examples.c /path/to/device_check/
- 在
device_check目录下创建一个CMake构建脚本,用于在主机端编译生成可执行文件。示例文件名为 CMakeLists.txt。参数设置及说明,参看 创建构建脚本。
需在 add_executable 中设置目标可执行文件名称为 device_check,并且绑定本示例源码文件 hm_sys_info_examples.c。
需在 target_link_libraries 中设置目标可执行文件名称为 device_check。
cmake_minimum_required(VERSION 3.16)
set(CMAKE_TOOLCHAIN_FILE ${ANDROID_NDK}/build/cmake/android.toolchain.cmake)
project(IpuTest)
# 设置C++标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
# Android特定配置 - 需通过命令行传入ANDROID_NDK路径
if(NOT ANDROID_NDK)
message(FATAL_ERROR "请通过-DANDROID_NDK=指定NDK路径")
endif()
# 设置Android平台和架构
if(NOT ANDROID_PLATFORM)
set(ANDROID_PLATFORM android-24) # 最低支持Android 7.0
endif()
if(NOT ANDROID_ABI)
set(ANDROID_ABI arm64-v8a) # 默认编译ARM64架构
endif()
# Android平台配置
set(ANDROID_STL c++_shared) # 使用共享STL
set(ANDROID_USE_LEGACY_TOOLCHAIN_FILE FALSE)
# 设置库文件名称和搜索路径(Android平台)
set(HAL_LIBRARY_NAMES hal_xh2a)
set(LIB_SEARCH_PATHS
${CMAKE_CURRENT_SOURCE_DIR}/../lib/android/${ANDROID_ABI}/ # 按架构区分的库路径
${CMAKE_CURRENT_SOURCE_DIR}/../lib/android/ # 通用Android库路径
)
set(CMAKE_FIND_LIBRARY_SUFFIXES .so .a) # Android常用库后缀
# 直接指定库文件绝对路径,替换所有 find_library 相关代码
set(HAL_LIBRARY /path/to/houmo-drv-xh2/hal/lib/libhal_xh2a.so)
if(NOT EXISTS ${HAL_LIBRARY})
message(FATAL_ERROR "HAL库不存在:${HAL_LIBRARY}")
endif()
message(STATUS "找到HAL库: ${HAL_LIBRARY}")
# 包含头文件目录
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
# 添加可执行文件
add_executable(device_check hm_sys_info_examples.c)
# 链接库文件
target_link_libraries(device_check PRIVATE ${HAL_LIBRARY})
-
在
device_check目录下创建编译脚本,如compile.sh。用于执行交叉编译流程。建议直接复用镜像升级流程中的编译脚本。 -
从系统软件包的
/path/to/houmo-drv-xh2/hal/export/include目录复制hm_sys.h和hm_api.h到device_check目录下:
cd /path/to/houmo-drv-xh2/hal/export/include
scp hm_api.h hm_sys.h ../../../../device_check/
- 从系统软件包的
/path/to/houmo-drv-xh2/hal/lib目录复制libhal_xh2a.a和libhal_xh2a.so到device_check目录下:
cd /path/to/houmo-drv-xh2/hal/lib
scp libhal_xh2a.a libhal_xh2a.so ../../../device_check/
- 编译生成可执行文件。在主机端执行以下命令,生成可执行文件:
cd device_check
chmod +x compile.sh
./compile.sh
编译成功后,会在编译脚本中指定的输出目录中生成可执行文件。示例中,该目录为 build_android,可执行文件名称为 device_check。
-
传输文件至 Android 端。
- 将主机端的
device_check文件夹推送至 Android 端的/data/houmo目录:
- 将主机端的
adb push device_check /data/houmo
2. 启动Android开发板并进入 shell 模式:
adb shell
su
- 配置环境变量。在Android端设置驱动库路径:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data/houmo/houmo-drv-xh2/hal/lib
- 获得设备信息。在Android端,进入
device_check目录,执行以下命令获取设备信息。
cd /data/houmo/device_check/build_android
./device_check
设备信息输出示例如下:
===== Device 0 =====
[dev 0] Basic Properties:
vendor id: 0x1f6b
serial: 0206020100002025004800000019
name: LQ50 DUO-36GB
computing power: 100 TFLOPS
core count: 2
[dev 0] Runtime Metrics:
core util rate: 0.00
core[0] util: 0.00
core[1] util: 0.00
avg ipu frequency: 1400000000 Hz
ipu voltage: 750.00 mV
memory: total 18304 MB, used 0 MB, avail 18304 MB
temperature: 26.59 C
[dev 0] PCIe / Board Info:
PCIe BDF: 0001:11:00.00
PCIe bandwidth: 8.0 GT/s PCIe -2lane
board power: 12.59 W
[dev 0] SDK and Firmware Info:
SDK build time: May 19 2026 00:37:11
SDK version: v1.3.0
driver version: v1.3.0
device firmware version: 1.3.0
DDR size: 19327352832 bytes
DVFS mode: 0
===== Device 1 =====
[dev 1] Basic Properties:
vendor id: 0x1f6b
serial: 0206020100002025004800000019
name: LQ50 DUO-36GB
computing power: 100 TFLOPS
core count: 2
[dev 1] Runtime Metrics:
core util rate: 0.00
core[0] util: 0.00
core[1] util: 0.00
avg ipu frequency: 1400000000 Hz
ipu voltage: 750.00 mV
memory: total 18304 MB, used 0 MB, avail 18304 MB
temperature: 26.88 C
[dev 1] PCIe / Board Info:
PCIe BDF: 0000:01:00.00
PCIe bandwidth: 8.0 GT/s PCIe -2lane
board power: 0.00 W
[dev 1] SDK and Firmware Info:
SDK build time: May 19 2026 00:37:11
SDK version: v1.3.0
driver version: v1.3.0
device firmware version: 1.3.0
DDR size: 19327352832 bytes
DVFS mode: 0