背景:

多媒体系统目前在Linux操作系统,windows操作系统已经非常成熟,并且应用场景广泛,但是,基于OpenAtom OpenHarmony(以下简称“OpenHarmony”)操作系统,目前如果使用到多媒体(音频)是需要做一系列的适配动作,才能应用到各种场景。

方案:

基于OpenHarmony适配RK系列开发板音频驱动总体方案是:基于HDF框架和ADM模型,在内核层中创建DAI、DMA和Codec三个模块,并实现例化ADM定义的DAI、DMA和Codec回调业务接口,ADM通过这些接口实现音频数据处理与功能控制;然后再通过HCS配置设备节点和服务,通过HDF的服务管理机制,对内核层和用户层提供服务。针对DAI、DMA和Codec,首先分别创建对应的适配器模块(RK系列开发板daiadapter、RK系列开发板dmaadapter、es8838codecadapter),在其中实现驱动的注册、绑定、初始化和释放;然后分别创建三者对应的操作集模块(RK系列开发板daiops、RK系列开发板dmaops、es8838codecops),在其中实现所有ADM定义的对应业务接口;最后在deviceinfo.hcs中配置三者公有的参数,若需要配置私有参数,则还需要分别创建三者对应的HCS配置文件(daiconfig.hcs、dmaconfig.hcs、codecconfig.hcs)。

RK系列开发板 DAI模块适配:

DAI主要作用是通过I2S将Soc与Codec连接,实现在Soc和Codec之间音频数据的传输,其中I2S驱动由HDF框架提供。ADM定义的DAI接口包括:DAI设备初始化、读写(Soc的)寄存器、音频设备启动、下发硬件参数和事件监听共6个接口。

在适配器模块中实例化ADM定义的DAI两个结构体:DaiData(SoC端DAI数据集)和AudioDaiOps(SoC端DAI操作集);在操作集模块中实现6个ADM定义的DAI的业务接口函数;配置DAI设备节点公有参数,若有需要,则可配置SoC端的I2S寄存器信息等私有参数。

RK系列开发板 DAI模块关系:

  1. RK系列开发板daiadapter
  • 实例化SoC端DAI操作集:g_daiDeviceOps,核心成员字段值定义如下:

    • Startup = RK系列开发板DaiStartup;
    • HwParams = RK系列开发板DaiHwParams;
    • Trigger = RK系列开发板DaiTrigger。
  • 实例化SoC端DAI数据集:g_daiData,核心成员字段值定义如下:
    • DaiInit = RK系列开发板DaiDeviceInit;
    • Read = RK系列开发板DaiDeviceReadReg;
    • Write = RK系列开发板DaiDeviceWriteReg;
    • ops = &g_daiDeviceOps,SoC端DAI操作集地址。
  • 实例化HdfDriverEntry类型的DAI驱动实体:g_daiDriverEntry,核心成员字段值定义如下:
    • moduleVersion = 1,模块版本号;
    • moduleName = "DAI_RK系列开发板",模块名;
    • Bind = DaiDriverBind;
    • Init = DaiDriverInit;
    • Release = DaiDriverRelease。
  • DAI驱动注册到鸿蒙系统:HDFINIT(gdaiDriverEntry)。
  • 实现以下函数:
    • DaiDriverInit,DAI驱动初始化函数;
    • DaiDriverBind,DAI驱动绑定函数;
    • DaiDriverRelease,DAI驱动释放函数。
    1. RK系列开发板 daiops
  • 实现以下函数:
    • RK系列开发板DaiDeviceInit,初始化SoC端DAI设备函数;
    • RK系列开发板DaiDeviceReadReg,读SoC端DAI设备寄存器函数;
    • RK系列开发板DaiDeviceWriteReg,写SoC端DAI设备寄存器函数;
    • RK系列开发板DaiStartup,启动SoC端DAI设备函数;
    • RK系列开发板DaiHwParams,下发SoC端DAI硬件参数函数;
    • RK系列开发板DaiTrigger,监听并处理事件函数。

总结:

在OpenHarmony操作系统中,适配音频驱动是非常重要的一个模块,本文只是其中的一个步骤,DAI模块适配,通过示意图的分析,以及核心代码的指导,相信读者会对音频适配有一个基本的了解,之后的文章中,会逐步更新音频驱动的DMA模块适配、Codec模块适配、Audio HCS配置等。

RK系列开发板音频驱动适配指南(一)相关推荐

  1. RK系列开发板音频驱动适配指南(二)

    背景: 上一篇文章RK系列开发板音频驱动适配指南-DAI模块适配中已经阐述音频驱动适配的DAI模块适配步骤以及核心代码的展示,本次主要介绍音频驱动适配中的DMA模块适配. RK系列开发板 DMA模块适 ...

  2. 如何从零开始开发一款嵌入式产品(20年的嵌入式经验分享学习,来自STM32神舟系列开发板设计师的总结)

    转载: 来源:www.armjishu.com 作者:jesse 我的另一篇文章:<STM32嵌入式入门必看之文章-----介绍非常详细!(学STM32的理由!!!!)>http://ww ...

  3. 构建一个适合stm32mp157系列开发板的嵌入式Linux系统

    在线课堂:https://www.100ask.net/index(课程观看) 论  坛:http://bbs.100ask.net/(学术答疑) 开 发 板:https://100ask.taoba ...

  4. 瑞芯微RK3399嵌入式开发板Wifi 驱动 build in 方式

     RK3399的CPU采用big.LITTLE大小核架构,双Cortex-A72大核+四Cortex-A53小核结构,对整数.浮点.内存等作了大幅优化,在整体性能.功耗及核心面积三个方面都具革命性提升 ...

  5. STM32MP157驱动开发——Linux 音频驱动

    STM32MP157驱动开发--Linux 音频驱动 一.简介 1.CS42L51 简介 2.I2S总线 3.STM32MP1 SAI 总线接口 二.驱动开发 1.音频驱动 1)修改设备树 i2c 接 ...

  6. Beaglebone Black开发板安装驱动

    Beaglebone Black开发板安装驱动 Beaglebone Black开发板安装驱动,在使用Beaglebone Black开发板子做任何事情之前首先需要安装驱动.下面的内容就了展示在Win ...

  7. 【STM32F103ZE】TOF250(TTL)基于STM32系列开发板的运用

    目录 @[TOC](目录) 一.前言 二.硬件准备 二.软件准备 三.硬件接线图 四.例程源码 五.烧录说明 5.1 烧录接线示意图 5.2 烧录动态图 六.结果输出 一.前言 此片文章主要介绍如果通 ...

  8. 【STC12C5A60S2】TOF250(TTL)基于51系列开发板的运用

    目录 一.前言 二.硬件准备 二.软件准备 三.硬件接线图 四.例程源码 五.烧录说明 5.1 烧录接线示意图 5.2 烧录动态图 六.结果输出 一.前言 此片文章主要介绍如果通过51系列开发板来读取 ...

  9. 龙芯智龙开发板:驱动步进电机实战入门

    本文面向初学者,请多各位高手包涵.我在此特别致谢勤为本先生为我提供的帮助. 步进电机 步进电机就是一种受脉冲控制的电机,步进电机接收到一系列某种调制顺序的脉冲,做出相应的反应,转到相应的角度或者相应的 ...

最新文章

  1. java 默认数据库创建路径_无法创建数据库路径文件:/ user / hive /仓库错误
  2. php lumen auth,学习 Lumen 用户认证 (一)
  3. 4.5.3 BGP协议
  4. CentOS7安装RabbitMQ集群
  5. Tomcat 服务器server.xml,web.xml的关键参数配置
  6. 第七节:WebApi与Unity整合进行依赖注入和AOP的实现
  7. eigen冲突 sophus 安装_SLAM-Sophus模板库安装总结
  8. Lua重回TOP 20,TIOBE 3月编程语言排行榜出炉
  9. Linux之time命令
  10. 大规模数据作成时的注意点。
  11. NSUserDefaults 的用法
  12. HelloWorld入门程序
  13. Microsoft® .NET Micro Framework简介
  14. 我用python代码表白,泡到了大学小师妹
  15. 阿里天池大数据竞赛(一)用ODPS提取特征
  16. 《程序员练习生》第5期 学习编程的乐趣
  17. General Sultan UVA - 11604(建图暴力)
  18. 慧居科技在港交所上市状态“失效”,双良科技为控股股东
  19. 微信小程序之实现到商品列表跳转商品详情页
  20. 知网文献使用EndNote X9在word插入参考文献

热门文章

  1. 初等数论 - 定理证明
  2. ESXi+黑群晖 由静态ip改回DHCP
  3. 从软件测试培训班出来后找工作这段时间的经历,教会了我这五件事...
  4. outlook服务器无法搜索邮件,outlook2010无法搜索解决方法
  5. Linux中清除痕迹和隐藏自己-清除last login
  6. Unity植物大战僵尸游戏素材+源码
  7. anconda 下的pip路径_修改conda环境和缓存默认路径/修改Python 的 pip install 默认安装依赖路径/提高conda安装速度,其实就是改了下载源。...
  8. windows计算机图标历史,从1993年至今,Windows开始菜单的传奇发展史
  9. 图数据库的类别有哪些?解读:图数据库分类与原理
  10. python实现字符串类型 str 转换为 list 类型(unicode 转换为 list)