开发OpenHarmony下的USB设备驱动,需要使用libusb库,所以进行编译,记录编译步骤。
文章写于2026年8月,若后续开发环境、代码版本等有更新,以最新的为准。
1、安装开发环境
安装华为开发环境DevEcoStudio,并在设置-->OpenHarmony SDK中安装所需的API版本(如果只是开发HarmonyOS,则无需额外安装OpenHarmony SDK,安装环境已默认安装)
2、获取代码
获取libusb代码,由于我使用CMake,所以下载的是libusb-cmake,使用如下Git命令
git clone https://github.com/libusb/libusb-cmake.git
我目前拉取的libusb版本号是1.0.30
3、修改CMakeList.txt
由于我2026.08.14拉取的代码,其CMakeList.txt尚未支持鸿蒙,所以执行CMake时会报错 CMakeList.txt 421 Unsupported target platform: OHOS
所以我自己分析、判断、摸索,再请教AI,对CMakeList.txt做了补充。是参考Linux平台分支的写法,做一些调整。
修改的内容如下(以我拉取时的CMakeList.txt行号为例):
1)、在第419行list(APPEND LIBUSB_PC_LIBS_PRIVATE -pthread -lembind -sASYNCIFY)的内容后面,亦即elseif(EMSCRIPTEN)平台代码段和未识别平台走的else()代码段之间,加入以下鸿蒙平台的内容
elseif(CMAKE_SYSTEM_NAME STREQUAL "OHOS")
target_sources(usb-1.0 PRIVATE
"${LIBUSB_ROOT}/os/linux_netlink.c"
"${LIBUSB_ROOT}/os/linux_usbfs.c"
"${LIBUSB_ROOT}/os/linux_usbfs.h"
)
find_package(Threads REQUIRED)
list(APPEND LIBUSB_PRIVATE_LINK_LIBRARIES Threads::Threads)
if(CMAKE_THREAD_LIBS_INIT)
list(APPEND LIBUSB_PC_LIBS_PRIVATE "${CMAKE_THREAD_LIBS_INIT}")
endif()
if(NOT LIBUSB_BUILD_SHARED_LIBS)
set(LIBUSB_CONFIG_NEEDS_THREADS ON)
endif()
2)、在第82行if(CMAKE_SYSTEM_NAME MATCHES "Linux" OR ANDROID)的地方,加上鸿蒙的内容,改为
if(CMAKE_SYSTEM_NAME MATCHES "Linux" OR ANDROID OR CMAKE_SYSTEM_NAME STREQUAL "OHOS")
改完之后这部分的代码段是如下
if(CMAKE_SYSTEM_NAME MATCHES "Linux" OR ANDROID OR CMAKE_SYSTEM_NAME STREQUAL "OHOS")
check_include_files(asm/types.h HAVE_ASM_TYPES_H)
check_function_exists(pthread_setname_np HAVE_PTHREAD_SETNAME_NP)
endif()
4、执行CMake
确认鸿蒙SDK的路径,比如我安装时选的是C:\HuaweiDevelop\23,并确认工具链ohos.toolchain.cmake,以及SDK带的cmake、ninja的目录。
打开命令行,到libusb-cmake目录,执行类似如下CMake命令:
C:\HuaweiDevelop\23\native\build-tools\cmake\bin\cmake -G Ninja -B out -DCMAKE_TOOLCHAIN_FILE=C:\HuaweiDevelop\23\native\build\cmake\ohos.toolchain.cmake -DCMAKE_MAKE_PROGRAM=C:\HuaweiDevelop\23\native\build-tools\cmake\bin\ninja.exe -DOHOS_ARCH=arm64-v8a -DCMAKE_BUILD_TYPE=RelWithDebInfo
其中out是CMake和编译输出的目录,可自定义
DOHOS_ARCH=arm64-v8a是编译的目标平台,可按需设置
DCMAKE_BUILD_TYPE=RelWithDebInfo是编译选项,可按需设置Debug、Release等
编译配置缺省是默认编静态库,而项目的CMake文件中有如下片段
if(LIBUSB_BUILD_SHARED_LIBS)
add_library(usb-1.0 SHARED)
else()
add_library(usb-1.0 STATIC)
endif()
以及
if(BUILD_SHARED_LIBS)
set(LIBUSB_BUILD_SHARED_LIBS_DEFAULT ON)
else()
set(LIBUSB_BUILD_SHARED_LIBS_DEFAULT OFF)
endif()
所以如果需要编译动态库,则在CMake命令中加上 -DLIBUSB_BUILD_SHARED_LIBS=ON
或者加上 -DBUILD_SHARED_LIBS=ON
之后等待CMake完成
5、编译
在命令行中继续执行如下命令
C:\HuaweiDevelop\23\native\build-tools\cmake\bin\cmake --build out
等待编译完成
应该会在out目录下看到libusb-1.0.a,或者libusb-1.0.so,就是生成的库文件
6、按需编译examples测试程序
如果需要编译libusb自带的测试程序,则在CMake命令中加入-DLIBUSB_BUILD_EXAMPLES=ON
编译后会在输出目录的examples文件夹下得到listdevs等文件
参考文章:
Windows上使用OpenHarmony SDK交叉编译指导