赵海鹏:如何进行 OpenHarmony 音频特性架构设计和开发工作
编者按:在 OpenHarmony 生态发展过程中,涌现了大批优秀的代码贡献者,本专题旨在表彰贡献、分享经验,文中内容来自嘉宾访谈,不代表 OpenHarmony 工作委员会观点。
本期 OpenAtom OpenHarmony(以下简称“OpenHarmony”)开发者故事,我们特别采访了 2 月代码最佳贡献者、一位接触 OpenHarmony 1 年左右,2022 年初便完成高难度开发项目的开发者——润和软件资深软件开发工程师赵海鹏。
赵海鹏是润和 OpenHarmony 南向业务媒体领域负责人,主要承担 Audio 开发工作。在 RK3568 平台 Audio Driver Model 适配开发过程中,在突遇西安疫情的情况下,硬件和沟通问题都面临巨大的挑战,面对急迫性的项目需求,赵海鹏和他的伙伴迎难而上,通过各种渠道去协调设备,把做好的固件寄送出去,协调软件所的伙伴们做远程测试,包括焊接等等,几乎每天在线工作及沟通 12 个小时以上,最终克服困难圆满完成任务。
我们与赵海鹏一起聊了他加入 OpenHarmony 生态的初心、对 OpenHarmony 架构适配的理解、工作中遇到的难题和攻克的过程、以及开源过程的心得与教训等话题。现将专访内容整理如下,希望对你有所启发。
Q=OpenHarmony A=赵海鹏
Q1:请简要介绍下自己,以及所在开发团队
大家好,我是润和软件资深软件开发工程师赵海鹏。我从 2020 年 10 月份开始正式接触 OpenHarmony 开源项目,开始了解框架和结构。目前在润和软件主要负责 OpenHarmony 南向业务媒体领域。
Q2:作为开发领域知名的技术大牛,您最初为什么会选择加入OpenHarmony生态、参与开源共建呢?您认为,OpenHarmony项目最吸引人的点在哪里?
第一个层面,从大的环境来说,OpenHarmony 是创新的操作系统,这是吸引我的首要因素。
第二个层面,从个人成长来说,我希望在 OpenHarmony 发展的初期加入进来,这样会让我对整个系统框架的演变更为清楚,个人的成长机会点相对比较多。
Q3:您方便给我们介绍一下这个产品吗,或者这段经历吗?这么短时间达成了这样好的效果,请问您的“秘诀”都有哪些呢?
"秘诀"谈不上,主要学习和工作过程中,多给自己提问题,带着问题去学习与研究;同时,针对过程遇到问题不断总结与积累,形成知识库。
我接着说一下主要贡献的特性。我们目标是,把社区上非海思芯片第三方平台 RK3568 的 Audio 驱动适配起来。因为 Openharmony Audio 驱动框架是 ADM,原生的驱动是 ALSA,差异相对来说比较大。为了加快进度协调软件所的一个伙伴和我一起联合开发,正好赶上西安的疫情,我就一直在家里专注的搞研发,需要交流就通过线上沟通。过程中会遇到很多困难,调试 Audio 驱动,需要一些硬件设备(示波器、逻辑分析仪等)的支撑,而处在疫情环境下,有的设备是缺少的,西安的快递也很难进来,我们通过各种渠道去协调设备,然后把做好的固件发出去,让中科院软件所的伙伴做远程测试,包括焊接等等。
另外,我们任务的时间节点比较紧张,只有不到一个月左右的时间,Audio 驱动代码裁剪过后还有三万行,也就是我们要把三万代码读懂再适配到 OpenHarmony 上,给我们的工作也增加了难度,但是我们都一一克服,坚挺过来,最终完成了任务。
Q4:能开发出这么一个优秀的产品,将核心代码合入主干,您和您的团队一定付出了很多。可以请您给我们分享一下,开发这个产品的整个过程,包括前期、中期、后期,您们具体都做了哪些工作,投入了多少人力和资源吗?
在前期,内核代码中 Audio 相关的有 10w+ 的代码,需要做裁剪成最小集合,另外,需要梳理主线上 ADM 的代码框架,参考:https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/driver/driver-peripherals-audio-des.md。
中间阶段,进入真正的开发过程中,我先把框架做好,然后按照模块分工合作开发。当时因为是线上办公,每天的工作时间都在 12 小时以上,双方通过线上会议交流,出现问题及时沟通及时解决。
后期主要是调试阶段,当时信号有一些问题,中科院软件所的硬件工程师帮我们焊接,然后采样并把信号图像回传到我们这边,再做分析,然后再做下一个方案的调整,遇到一些难以解决的问题,也会求助 ADM 框架负责人。为了保证较高的工作效率,这些都在线上会议进行沟通。
另外,调试过程中发现框架存在一些不友好不完善的地方,在适配过程中不断完善,形成了 Linux 相对简单适配的方案并形成文档,在社区上发布。该方案存在的问题是不兼容 LiteOS,没有完全实现 ADM 的优化能力。
Q5:在整个开发进程中,您和您的团队遇到过哪些技术上或其他方面的难题呢?这些难题又是如何被逐一解决的?在这些难题被解决的过程中,您总结了哪些宝贵的经验or教训呢?
技术问题:RK3568 平台的 codec 组件使用的 RK809,此芯片不是单一的 Codec 功能还包含电源管理的模块,使用同一路 I2C 控制通道,拆分难度大,可能还要设计电源管理模块。
解决方案:借助 Linux 原生驱动,ADM 的驱动接口初始化节点调用对应的 probe 函数,按照此思路触类旁通,其余模块也按照的这样的操作,减少驱动代码开发对寄存器的依赖,提升开发效率。具体的方案在 RK3568 驱动适配文档中有说明,请关注。
Q6:加入OpenHarmony生态以来,您最大的惊喜是什么?或者有哪些具体的收获?
收获的第一个层面,是我以前的工作经历相对来说是单个模块或者单个特性,而现在有机会面对整个系统。同时,OpenHarmony 正经历从 0 到 1 的过程,在我们工作的过程中可以深入了解整个系统,获得比较全面的认知,对能力的提升空间比较大。
第二层面针对系统的设计,以前我只需要考虑需求内部实现逻辑、流程、接口等。现在做需求设计的时候,先考虑外部依赖,定义接口,然后再去设计具体的需求的框架,软件分层等等。
Q7:OpenHarmony目前仍处在开发探索阶段,很多共建单位和生态伙伴还不清楚开源项目的玩法,或不知该如何着手进行开发。可以请您给大家分享一条,您认为最重要或最值得分享的心得吗?
我觉得最主要的是结合自己过往的工作背景或者环境,如果没有太多经验,可以从 mini system 入手,如果有一些安卓或者 Linux 的经验,可以从 standard system 入手。总之,一定要从自己熟悉的模块入手,这样才能触类旁通,通过边学边拆的方式,熟悉度才会越来越高。
入手之后,需要集中在单点上深入研究,把一个点深度了解后,其他点学习的就会比较快。同时也要看看整体的架构,如果对架构都不了解的话,是不足以支撑后续开发和项目工作,至少需要有概念性的认知。
Q8:开放性问题,可以畅所欲言,请问您还有话想告诉大家?
从驱动系统上来讲,目前 OpenHarmony 的驱动是基于 HDF 开发的,既可以在 Linux 上运行,也可以在 LiteOS 上运行,便于移植。但目前成熟度不够,适配难度较高。对开发者来说不太友好,希望各共建单位和开源开发者一起去完善,让平台驱动适配更容易。
搜索
复制
赵海鹏:如何进行 OpenHarmony 音频特性架构设计和开发工作的更多相关文章
- 从Facebook跑来阿里的赵海平大叔,你要干啥?
赵海平在今年三月份来到阿里,听毕玄(他现任主管)说去年五六月份就跟赵海平聊上了.有人问:为啥 BAT 三大巨头,你看中了阿里巴巴?在今天现场达一千多人的分享中赵海平给出了回复:“因为百度和腾讯没找我呗 ...
- 专访Facebook HipHop作者/阿里研究员赵海平:生物与计算机交织的独特人生
3 月 26 日,杭州的天阴沉沉,这是一种山色空蒙雨亦奇的美丽,还是雾霭笼罩下的怪异,对于来访阿里巴巴西溪园区的人们来说,没人关心这些.人们行色匆匆,兴奋地往各自目的地奔赴而去.我也来不及细思这些,因 ...
- 专访阿里巴巴研究员“赵海平”:Facebook的PHP底层性能优化之路(HipHop,HHVM)
专访阿里巴巴研究员“赵海平”:Facebook的PHP底层性能优化之路 http://www.infoq.com/cn/articles/interview-alibaba-zhaohaiping
- 基于MATLAB的GUI(Graphical User Interface)音频实时显示设计
摘要:本文章的设计主要讲基于matlab的gui音频实时显示设计,此次设计的gui相当于一个简洁的音乐播放器,界面只有”录音“和”播放“两个控件,哈哈,够简洁吧.通过”录音“按钮可以实现声音从电脑的声 ...
- TOP100summit2017:网易云通信与视频CTO赵加雨:外力推动下系统架构的4个变化趋势
壹佰案例:很荣幸邀请到您成为第六届壹佰案例峰会架构专场的联席主席,您曾深度参与Cisco Jabber,Webex Meeting, Cisco Spark等多项分布式实时通信类产品的架构与研发, ...
- Atitit.cateService分类管理新特性与设计文档说明v1
Atitit.cateService分类管理新特性与设计文档说明v1 1. V2 新特性规划1 2. 分类管理1 3. 分类增加与修改维护2 4. Js控件分类数据绑定2 1. V2 新特性规划 增加 ...
- react 16.8版本新特性以及对react开发的影响
Facebook团队对社区上的MVC框架都不太满意的情况下,开发了一套开源的前端框架react,于2013年发布第一个版本. react最开始倡导函数式编程,使用function以及内部方法React ...
- iOS16新特性 | 灵动岛适配开发与到家业务场景结合的探索实践
作者:京东零售 姜海 灵动岛是苹果在iPhone 14 Pro和iPhone 14 Pro Max上首次提出的全新UI交互形式,创新性的让虚拟软件和硬件的交互变得更为流畅.当有来电.短信等通知时,灵动 ...
- 海思arm平台AAC音频转码cpu占用高、效率低的问题解决
问题背景 目前市面上的大部分IPC摄像机音频输出基本都是G711.G726编码格式,而在类似于<基于EasyNVR实现RTSP/Onvif监控摄像头Web无插件化直播监控>这种业务中,都是 ...
- HTML5八大特性助力移动WebApp开发
http://www.cocoachina.com/webapp/20150906/13344.html WebApp的实现基础就是HMTL5+JS+CSS3,但是WebApp还是基于浏览器的微网站开 ...
随机推荐
- 通过 saltstack 批量更新 SSL 证书
哈喽大家好,我是咸鱼. 之前写过两篇关于 SSL 过期巡检脚本的文章: SSL 证书过期巡检脚本 SSL 证书过期巡检脚本(Python 版) 这两篇文章都是讲如何通过脚本去自动检测 SSL 过期时间 ...
- DataGear 制作自适应任意屏幕尺寸的数据可视化看板
DataGear 即支持以编写HTML.JavaScript.CSS源码的源码模式制作看板,也支持直观可见.友好快捷的可视模式制作看板. 本文将通过看板可视编辑模式提供的网格布局和样式设置功能,介绍如 ...
- [App Service for Windows]通过 KUDU 查看 Tomcat 配置信息
问题描述 在App Service 中选择了Java Tomcat后,如何查看Azure App Service的Tomcat的配置信息呢? 问题解答 可以通过以下的 3个步骤查看: 第一步:登录 K ...
- 如何查看apk安装包源代码??Android反编译apk,解包,打包,签名一体化实测 ,修改图片音频软件名称版本号等入门
首先下载反编译工具包 下载地址 链接: https://zly520.lanzoui.com/ibtuxhf7rab 一.反编译工具介绍 首先 如果你想改动图片音频之类的,见末尾! 1.apktoo ...
- Codeforces Round 345 (Div. 1)A. Watchmen(容斥原理)
A. Watchmen 当欧几里得距离和曼哈顿距离相等时,\(x1==x2||y1==y2\) 这两个条件满足其一.这和容斥原理一样,至少选择一个的条件. 我们可以计算xi,以及小于i之前的这些,这样 ...
- P2251 质量检测(分块线段树RMQ单调队列)
P2251 质量检测 正解应该是ST表和单调队列,不过对于这道题来说只有查询没有修改,这里我还是想用线段树和分块来写,不得不说分块是真好,优雅的暴力 线段树版本: #include <bits/ ...
- 【容斥、状压dp】主旋律 题解
[清华集训2014]主旋律 题解 神秘题. 题目简述 给你一个有向图 \(G=(V,E)\).求有多少 \(E\) 的子集 \(E'\) 使得新图 \(G'=(V,E')\) 是强连通图. 强连通图的 ...
- 使用 Docker 部署 Fiora 在线聊天室平台
一.Fiora 介绍 Fiora 简介 Fiora 是一款开源免费的在线聊天系统. GitHub:https://github.com/yinxin630/fiora Fiora 功能 注册账号并登录 ...
- 常用命令rsyncscp-1
常用命令:rsync/scp scp scp命令文件传输 scp命令用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的.可能 ...
- String内存模型和Java常用方法
一.String内存模型 1.直接赋值创建string对象内存原理: StringTable(串池):字符串常量池,用来存储字符串,只能是在直接赋值中使用才会存在串池当中(JDK7前串池是在方法区里面 ...