RK系列开发板音频驱动适配指南(一)
背景:
多媒体系统目前在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模块关系:
- 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驱动释放函数。
- 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系列开发板音频驱动适配指南(一)相关推荐
- RK系列开发板音频驱动适配指南(二)
背景: 上一篇文章RK系列开发板音频驱动适配指南-DAI模块适配中已经阐述音频驱动适配的DAI模块适配步骤以及核心代码的展示,本次主要介绍音频驱动适配中的DMA模块适配. RK系列开发板 DMA模块适 ...
- 如何从零开始开发一款嵌入式产品(20年的嵌入式经验分享学习,来自STM32神舟系列开发板设计师的总结)
转载: 来源:www.armjishu.com 作者:jesse 我的另一篇文章:<STM32嵌入式入门必看之文章-----介绍非常详细!(学STM32的理由!!!!)>http://ww ...
- 构建一个适合stm32mp157系列开发板的嵌入式Linux系统
在线课堂:https://www.100ask.net/index(课程观看) 论 坛:http://bbs.100ask.net/(学术答疑) 开 发 板:https://100ask.taoba ...
- 瑞芯微RK3399嵌入式开发板Wifi 驱动 build in 方式
RK3399的CPU采用big.LITTLE大小核架构,双Cortex-A72大核+四Cortex-A53小核结构,对整数.浮点.内存等作了大幅优化,在整体性能.功耗及核心面积三个方面都具革命性提升 ...
- STM32MP157驱动开发——Linux 音频驱动
STM32MP157驱动开发--Linux 音频驱动 一.简介 1.CS42L51 简介 2.I2S总线 3.STM32MP1 SAI 总线接口 二.驱动开发 1.音频驱动 1)修改设备树 i2c 接 ...
- Beaglebone Black开发板安装驱动
Beaglebone Black开发板安装驱动 Beaglebone Black开发板安装驱动,在使用Beaglebone Black开发板子做任何事情之前首先需要安装驱动.下面的内容就了展示在Win ...
- 【STM32F103ZE】TOF250(TTL)基于STM32系列开发板的运用
目录 @[TOC](目录) 一.前言 二.硬件准备 二.软件准备 三.硬件接线图 四.例程源码 五.烧录说明 5.1 烧录接线示意图 5.2 烧录动态图 六.结果输出 一.前言 此片文章主要介绍如果通 ...
- 【STC12C5A60S2】TOF250(TTL)基于51系列开发板的运用
目录 一.前言 二.硬件准备 二.软件准备 三.硬件接线图 四.例程源码 五.烧录说明 5.1 烧录接线示意图 5.2 烧录动态图 六.结果输出 一.前言 此片文章主要介绍如果通过51系列开发板来读取 ...
- 龙芯智龙开发板:驱动步进电机实战入门
本文面向初学者,请多各位高手包涵.我在此特别致谢勤为本先生为我提供的帮助. 步进电机 步进电机就是一种受脉冲控制的电机,步进电机接收到一系列某种调制顺序的脉冲,做出相应的反应,转到相应的角度或者相应的 ...
最新文章
- java 默认数据库创建路径_无法创建数据库路径文件:/ user / hive /仓库错误
- php lumen auth,学习 Lumen 用户认证 (一)
- 4.5.3 BGP协议
- CentOS7安装RabbitMQ集群
- Tomcat 服务器server.xml,web.xml的关键参数配置
- 第七节:WebApi与Unity整合进行依赖注入和AOP的实现
- eigen冲突 sophus 安装_SLAM-Sophus模板库安装总结
- Lua重回TOP 20,TIOBE 3月编程语言排行榜出炉
- Linux之time命令
- 大规模数据作成时的注意点。
- NSUserDefaults 的用法
- HelloWorld入门程序
- Microsoft® .NET Micro Framework简介
- 我用python代码表白,泡到了大学小师妹
- 阿里天池大数据竞赛(一)用ODPS提取特征
- 《程序员练习生》第5期 学习编程的乐趣
- General Sultan UVA - 11604(建图暴力)
- 慧居科技在港交所上市状态“失效”,双良科技为控股股东
- 微信小程序之实现到商品列表跳转商品详情页
- 知网文献使用EndNote X9在word插入参考文献
热门文章
- 初等数论 - 定理证明
- ESXi+黑群晖 由静态ip改回DHCP
- 从软件测试培训班出来后找工作这段时间的经历,教会了我这五件事...
- outlook服务器无法搜索邮件,outlook2010无法搜索解决方法
- Linux中清除痕迹和隐藏自己-清除last login
- Unity植物大战僵尸游戏素材+源码
- anconda 下的pip路径_修改conda环境和缓存默认路径/修改Python 的 pip install 默认安装依赖路径/提高conda安装速度,其实就是改了下载源。...
- windows计算机图标历史,从1993年至今,Windows开始菜单的传奇发展史
- 图数据库的类别有哪些?解读:图数据库分类与原理
- python实现字符串类型 str 转换为 list 类型(unicode 转换为 list)