立即注册
查看: 727|回复: 0

[鸿蒙OS技术分享] 如何在Linux环境中操作Hi3516DV300鸿蒙开发板实现Helloworld程序

已绑定手机
已实名认证
发表于 2021-6-30 13:48:10 | 显示全部楼层 |阅读模式 来自 广东省深圳市
鸿蒙(HarmonyOS)sample_test Demo
1. 目标
理解 HarmonyOS 驱动框架,用户态 APP 和内核态驱动之间的通信机制。具体运行结果为用户态 APP 向驱动发送 123 号 cmd,内核态读取该 cmd 对应的字符串 data,并打印出来。然后内核态驱动程序向用户态发送事件,传递的参数为 reply。用户态 APP 通过事件监听函数获取内核态发送的消息打印出来。

2. 编写驱动程序
这跟 Linux 的驱动框架不一样,在 Linux 中,APP 打开设备节点后,APP 调用的 read 函数会直接进入内核态调用驱动的 read 函数。在 Liteos-a 中使用 HDF 时,APP 需要先获得服务,然后调用服务的 Dispatch 函数:它可以向驱动发送数据、获得返回结果。
2.1 编写驱动 在 HDF 中,一个驱动被抽象为“HdfDriverEntry”,代码如下:
1.jpg
上述代码中,使用 HDF_INIT 定义了某些段属性的结构体,内核启动后会注册这个HdfDriverEntry。
重要的是其中的 Bind 函数,Init 和 release 函数顾名思义就是初始化和释放相关资源,这里好像和 HDF_INIT 有些冲突,示例函数用空函数来替代它们了。代码如下:
2.jpg

2.2 驱动服务函数的实现
在驱动初始化函数 HdfSampleDriverBind 中会绑定一个服务函数,这个服务函数用来处理用户态 APP 发送过来的消息。绑定过程是给 IDeviceIoService 这个结构体的 Dispatch 元素赋值来实现的。如图所示:
3.jpg
你可以认为 Dispatch 函数相当于 ioctl,在 Linux 中通过 ioctl(fd, cmd, arg)来操作驱动。在 LiteOS-a 中通过 service->>dispatcher->Dispatch(ojb, cmd, data, replay)来操作驱动。

更多详细内容请下载附件查看
2021-6-30 13:47 上传
文件大小:
786.4 KB
下载次数:
6
附件售价:
1 RD币  购买记录
本地下载 立即购买

16RD supports Paypal , Payment is calculated at the exchange rate of the day. Unable to download please contact 18902843661 (WhatsApp OR wechat number)

关于一牛网在微软浏览器(Microsoft Edge、IE浏览器)警报通告&解决方案!(无法下载直接更换浏览器即可)

*附件为作者发布,与本站无关,如有侵权,请联系客服删除

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

合作/建议

TEL: 19168984579

工作时间:
周一到周五 9:00-11:30 13:30-19:30
  • 扫一扫关注公众号
  • 扫一扫打开小程序
Copyright © 2013-2024 一牛网 版权所有 All Rights Reserved. 帮助中心|隐私声明|联系我们|手机版|粤ICP备13053961号|营业执照|EDI证
在本版发帖搜索
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表