设备检测与升级验证

本节用于在完成驱动安装和固件升级后,通过示例程序验证设备驱动与固件是否正常加载,并获取设备基础信息与运行状态。

执行以下步骤进行升级检查:

  1. 在主机端创建 device_check 文件夹:

    mkdir -p device_check
    
  2. 复制设备信息获取示例源码到 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/
    
  3. 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})
    
  4. device_check 目录下创建编译脚本,如 compile.sh。用于执行交叉编译流程。建议直接复用镜像升级流程中的编译脚本。

  5. 从系统软件包的 /path/to/houmo-drv-xh2/hal/export/include 目录复制 hm_sys.hhm_api.hdevice_check 目录下:

    cd /path/to/houmo-drv-xh2/hal/export/include
    scp hm_api.h hm_sys.h ../../../../device_check/
    
  6. 从系统软件包的 /path/to/houmo-drv-xh2/hal/lib 目录复制 libhal_xh2a.alibhal_xh2a.sodevice_check 目录下:

    cd /path/to/houmo-drv-xh2/hal/lib
    scp libhal_xh2a.a libhal_xh2a.so ../../../device_check/
    
  7. 编译生成可执行文件。在主机端执行以下命令,生成可执行文件:

    cd device_check
    chmod +x compile.sh
    ./compile.sh
    

    编译成功后,会在编译脚本中指定的输出目录中生成可执行文件。示例中,该目录为 build_android,可执行文件名称为 device_check

  8. 传输文件至 Android 端。

    1. 将主机端的 device_check 文件夹推送至 Android 端的 /data/houmo 目录:

      adb push device_check /data/houmo
      
    2. 启动Android开发板并进入 shell 模式:

      adb shell
      su
      
  9. 配置环境变量。在Android端设置驱动库路径:

    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data/houmo/houmo-drv-xh2/hal/lib
    
  10. 获得设备信息。在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