• Lv0
    粉丝2

积分15 / 贡献0

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

作者动态

    OpenHarmony,在应用开发的时候,nativeC++侧要怎么控制开发板的UART、GPIO、I2C这些驱动

    Lsheep 显示全部楼层 发表于 2024-8-15 10:58:40

    【问题描述】

    1. 想通过native C++控制一些连接在开发板上,像读卡器、语音模块、摄像头和一些第三方厂家的自定义协议设备。但不知道在用户应用程序开发的native C++侧怎么去控制底层的驱动,求大佬解惑

    【运行环境】

    硬件:RK3568 ROM版本:4.0 DevEvoStudio版本:next 2 SDK版本:10

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

    精彩评论13

    Lsheep

    沙发 发表于 2024-8-15 16:46:10
    这些外接的第三方厂家设备有的是串口、485、I2C通信,有的是IO控制

    wowni

    发表于 2024-8-23 09:50  IP属地: 天津市

    回复 Lsheep: 同问,请问你找到方法了吗

    Lsheep

    发表于 2024-8-23 13:57  IP属地: 江苏省扬州市

    回复 wowni: 目前是用linux的库在控制,像stdio、fcntl,去操作/dev/ttyS0、/sys/class/gpio/export、/sys/class/gpio/gpioX进行控制,但会遇到权限问题,而且鸿蒙应用还没权限调用类似system()可以执行系统命令的方法来改变文件的权限,这个权限问题目前还没解决。你有找到其他方法吗

    wowni

    发表于 2024-8-23 20:40  IP属地: 天津市

    回复 Lsheep: 没有,我们调研了好几款开发板,他们都是在系统层面可以实现串口通信,但是在应用层提供不了接口,现在没思路。

    【3 条回复】

    云端筑梦

    板凳 发表于 2024-8-22 17:45:32
    https://docs.openharmony.cn/page ... latform-gpio-des.md 可以看一下他们的驱动是怎么实现的

    wowni

    发表于 2024-8-23 09:52  IP属地: 天津市

    回复 云端筑梦: 看文档,他们都是在驱动层面实现的,像是在编译系统源码的时候调用系统中的头文件之类的,在应用层有办法调用吗

    云端筑梦

    发表于 2024-8-23 11:50  IP属地: 广东省广州市

    回复 wowni: 驱动会在上层产生对应的节点,你通过C语言去操作对应节点就好了

    Lsheep

    发表于 2024-8-23 13:52  IP属地: 江苏省扬州市

    回复 云端筑梦: 节点是指/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下的文件,请问这个有什么解决办法吗,还是我的实现方向是错误的

    【7 条回复】 查看全部

    润开鸿_梁开祝

    地板 发表于 2024-9-28 16:27:08
    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"组件就行了。
    共13 条回复,点击查看

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

    返回顶部