OpenHarmony开发者论坛
标题:
OpenHarmony,在应用开发的时候,nativeC++侧要怎么控制开发板的UART、GPIO、I2C这些驱动
[打印本页]
作者:
Lsheep
时间:
2024-8-15 10:58
标题:
OpenHarmony,在应用开发的时候,nativeC++侧要怎么控制开发板的UART、GPIO、I2C这些驱动
[md]### 【问题描述】
1. 想通过native C++控制一些连接在开发板上,像读卡器、语音模块、摄像头和一些第三方厂家的自定义协议设备。但不知道在用户应用程序开发的native C++侧怎么去控制底层的驱动,求大佬解惑
### 【运行环境】
硬件:RK3568
ROM版本:4.0
DevEvoStudio版本:next 2
SDK版本:10
[/md]
作者:
Lsheep
时间:
2024-8-15 16:46
这些外接的第三方厂家设备有的是串口、485、I2C通信,有的是IO控制
作者:
云端筑梦
时间:
2024-8-22 17:45
https://docs.openharmony.cn/page ... latform-gpio-des.md
可以看一下他们的驱动是怎么实现的
作者:
wowni
时间:
2024-8-23 09:50
回复
Lsheep
: 同问,请问你找到方法了吗
作者:
wowni
时间:
2024-8-23 09:52
回复
云端筑梦
: 看文档,他们都是在驱动层面实现的,像是在编译系统源码的时候调用系统中的头文件之类的,在应用层有办法调用吗
作者:
云端筑梦
时间:
2024-8-23 11:50
回复
wowni
: 驱动会在上层产生对应的节点,你通过C语言去操作对应节点就好了
作者:
Lsheep
时间:
2024-8-23 13:52
回复
云端筑梦
: 节点是指/dev和/sys/class/gpio里面的文件吗,例如/dev/ttyS0、/sys/class/gpio/export、/sys/class/gpio/gpioX。因为购买的是适配好的开发板,自己没有做设备开发,只做应用开发,所以我在nativeC++侧,是用linux的库调用/dev/ttyS0或/sys/class/gpio/gpioX在控制串口和gpio,但在使用/sys下的文件时会遇到权限问题,命令行把setlinux取消了也是无法打开/sys下的文件,请问这个有什么解决办法吗,还是我的实现方向是错误的
作者:
Lsheep
时间:
2024-8-23 13:57
回复
wowni
: 目前是用linux的库在控制,像stdio、fcntl,去操作/dev/ttyS0、/sys/class/gpio/export、/sys/class/gpio/gpioX进行控制,但会遇到权限问题,而且鸿蒙应用还没权限调用类似system()可以执行系统命令的方法来改变文件的权限,这个权限问题目前还没解决。你有找到其他方法吗
作者:
云端筑梦
时间:
2024-8-23 14:39
回复
Lsheep
: sys下的节点,再通过chmod去给他们对应的读写权限应该就可以操作了
作者:
wowni
时间:
2024-8-23 20:40
回复
Lsheep
: 没有,我们调研了好几款开发板,他们都是在系统层面可以实现串口通信,但是在应用层提供不了接口,现在没思路。
作者:
wowni
时间:
2024-8-23 20:44
回复
Lsheep
: 我们也是做应用层开发。我手里的板子,调用/dev下的节点倒是可以的,你可以加下我,咱们私信交流下
作者:
Lsheep
时间:
2024-8-26 09:53
回复
云端筑梦
: 好的,感谢
作者:
Lsheep
时间:
2024-8-26 09:54
回复
wowni
: 可以的
作者:
润开鸿_梁开祝
时间:
2024-9-28 16:27
OH系统提供的平台接口(包括adc/gpio/uart/i2c/spi等等),实际上是有两个版本的实现的:一个版本是内核态的实现,一个版本是用户态的实现;这两个版本的实现,接口的声明是一样的,都在//drivers/hdf_core/framework/include/platform/目录下的头文件中,但是其实现是不一样的,在//drivers/hdf_core/framework/support/platform/src/目录下的代码中,adc/gpio/uart/i2c/spi这些接口,以 adc 为例,内核态的实现是 adc_if.c,用户态的实现则是 adc_if_u.c。
在使用这些平台接口来实现你的功能时,可以有两种办法:
办法一:使用内核态的接口
可以参考“
https://ost.51cto.com/posts/11566
”这里的说明和示例程序,在内核态使用内核态的平台接口写好驱动程序和服务程序,并对用户态暴露服务节点,这样你的应用程序只需要打开服务节点,并通过服务节点下发命令到内核驱动,内核驱动再对下发的命令进行处理,完成外设的控制即可;
办法二:使用用户态的接口
直接在你的应用程序中使用现在驱动框架已经做好的并对用户态暴露的平台接口即可。需要注意的是,在你的应用程序的编译配置中要定义 "__USER__" 表明是在用户态,并要依赖"hdf_core:libhdf_platform"组件就行了。
欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/)
Powered by Discuz! X3.5