• Lv0
    粉丝0

积分11 / 贡献0

提问1答案被采纳0文章1

[经验分享] 关于OpenHarmony如何通过原生APP(HAP)+第三方so(Libusb)访问硬件设备的问题 原创

lxwinter 显示全部楼层 发表于 2024-2-28 16:09:20
各位大佬:
   请教一个问题,当前情况如下:
一、操作步骤
1、自己成功编译迁移了libusb.so,到OpenHarmony下
2、基于libusb库,编写了一个纯C/C++的可执行文件,调用libusb访问一个外接的USB小模块。

注:使用的CMakelist编译Execuable。然后把可执行文件和libusb.so,通过hdc(类adb)送到OH系统上

3、编译完的两个库,发送后,赋予可执行文件777权限,然后执行,hdc指令参考:
hdc file send XxxTest /data/local/XxxTest
hdc file send libusb1.0.so /data/local/libusb.so
hdc shell "chmod 777 /data/local/*"

hdc shell
cd /data/local/
./XxxTest
4、通过以上操作,在OpenHarmony3.1/4.0上,可以正常通过C/C++编写的可执行文件,调用libusb.so,可以正常调用到外接的USB小模块,并正常驱动起来。

二、原生APP通过NAPI调用libusb访问硬件设备问题
   基于以上访问验证通了以后,我需要编写一个原生APP(OH的HAP)去调用这个libusb访问设备。

1、使用DevEco Studio,编写了一个DEMO,选择Native C++,然后就是基于NAPI的代码。
2、加载起libusb,配置好CMakelist。以及把前面编写的C/C++可执行程序代码,移到NAPI里,对外导出对应接口
3、在ArkTs层,通过NAPI导出的接口,调用到libusb去访问设备
   结果:访问不到,报错,libusb初始化就失败了,libusb找不到USB设备列表。
4、尝试各种方法:给与APP各种访问权限、ArkTs申请文件访问权限、ArkTS申请USB权限、把libusb放到/system/lib并给644/777权限等
都没用,通过NAPI记录的日志显示,调用libusb的init失败,other_error。实际就是libusb遍历usb设备节点都没找到

这样做的原因:需要跨平台Linux/Android,保持同一套代码。

1、请教各位大佬:以上问题,有哪位清楚,有什么方案解决?
2、官方第三方库迁移列表里,有libusb,说是迁移成功。如果迁移的libusb都没法通过HAP原生APP调用,无法访问到USB设备,那官方迁移libusb的意义是?

官方迁移第三方库的地址:https://gitee.com/openharmony-sig/tpc_c_cplusplus

©著作权归作者所有,转载或内容合作请联系作者

您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

精彩评论2

论坛小助手 官方账号

沙发 发表于 2024-3-1 17:13:25
您好,您发布的内容更适合在【问答】板块发布,建议您更改发布渠道
【文章】板块主要是技术和开发经验分享,【问答】板块有更多的技术专家帮您答疑解惑

youan222

板凳 发表于 5 天前
我也遇到了同样的情况,我在3.2的版本下使用napi,意图走hdf控制led,显示报错如下,
Device info:OpenHarmony 3.2
Build info:OpenHarmony 3.2.11.9
Module name:com.example.lednapi
Js-Engine: ark
page: pages/Index.js
Error message: Failed to bind HDF service.
SourceCode:
                lednapi.ledControl(1); // 参数 1 表示开灯
                ^

查找日志报错:
No permission to send a system common event from com.example.lednapi(pid = 5313, uid = 20010038), userId = -3
/com.example.lednapi E C02500/hdf_syscall_adapter: <private>: load dev_mgr driver failed
/com.example.lednapi E C02500/hdf_devmgr_adapter: HdfLoadDriverByServiceName failed to get <private> service
/com.example.lednapi E C02500/hdf_syscall_adapter: <private>: load maniu_led_service driver failed
/com.example.lednapi E C03f00/ArkCompiler: [default] Call:1312 occur exception need return
找不到设备节点

Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

返回顶部