当前位置: 首页 > news >正文

芯片解决方案--SL8541e-OpenHarmony适配方案

摘要

本文描述8541E芯片适配OpenHarmony的整体方案。 

本文描述的整体方案,不止适用于8541e,也适用于该芯片厂家的其他芯片,如7863、7885,少部分子系统会略有差异。

整体方案架构

整体方案架构如下图,遵循OpenHarmony系统架构,在内核及HAL层与8541E芯片原厂SDK对接。

下文基于该方案架构,进一步阐述各子系统的对接方案。

内核子系统

首先需要确定使用哪个内核,这个问题影响大,影响各模块的适配方案,需要优先确定。一般,内核适配有两种策略:

策略1、使用原厂内核版本,打上OpenHarmony内核补丁;

策略2、使用OpenHarmony内核,移植原厂内核SDK中的修改代码,主要包括各种驱动。

因为原厂8541e内核是4.14版本,比较老,原厂没有基于该内核的闭源GPU方案可用于OpenHarmony系统,需要我们选用开源GPU来支撑芯片商用,而开源GPU的驱动Panfrost依赖5.x内核版本。

因此,我们选择策略2:使用OpenHarmony 5.10内核,然后从原厂4.14内核中移植各个模块的驱动到OpenHarmony 5.10内核上。

对于原厂其他芯片,根据原厂SDK的内核版本不同,这里可以采用不同的策略。

系统启动

如何使OpenHarmony正确启动,涉及的子系统有启动子系统、编译子系统、内核子系统等。

首先,内核要能正常启动,这部分涉及编译添加芯片和产品,编译出boot、ramdisk等相关image,还涉及BootLoader、bootargs、dts等修改;另外,内核要集成编译HDF框架,确保后续其他模块能正常启动。

然后,让内核能够正常启动ramdisk,启动后,在分区配置文件fstab中,要配置OpenHarmony的各个系统分区system、vendor、data的正确mount参数。

然后,init cfg中各个配置要正确。

然后,启动samgr、appswapn、softbus、foundation等后台程序,以及启动launcher、systemui等应用程序,这过程依赖内核要开启Access token、Binder、HDF等关键配置,这些关键配置可提前识别并打开。

最后,确保能正常启动到Launcher。

启动这部分与所有L2标准产品一致,不详细展开。

图形子系统

图形的适配,分为3大部分:图形基础、渲染、合成,因为这3部分的底层驱动和适配路径都不一样,因此分开阐述。

图形基础部分

OpenHarmony的图形子系统,支持对接DRM和FB两种模型的图形驱动。

各大厂商的富设备,大都已支持DRM驱动模型,8541E芯片也是如此,支持DRM图形驱动模型。

因此,我们在OpenHarmony Display HDI层采用DRM模型对接8541e图形驱动,准确的讲,是Display HDI通过DRM用户态接口库LibDRM对接8541e的DRM驱动。

主要工作有:

1、移植8541e DRM及相关的显示屏驱动,从4.14内核从5.10内核。

2、Display HDI接口适配。OpenHarmony社区代码已有RK3568的DRM适配示例,参考示例,结合8541e DRM驱动,调整各适配接口和参数。

为确保各部分工作是高质量完成的,从下到上可分步调试:

步骤1、使用ModeTest调试出图。当内核移植完之后,确保ModeTest正常可以获取DRM参数,可以显示界面。

步骤2、使用hello_composer调试出图。hello_composer是基于Display HDI接口的调试程序,在ModeTest出图正常之后,完成Display HDI接口适配,然后使用该程序调试Display HDI接口,确保HDI接口适配正确。

步骤3、显示OpenHarmony桌面。当hello_composer调试出图正常后,如果Launcher应用程序也正常启动,一般就可以显示OpenHarmony桌面;如果没有显示,一般是系统或者Launcher启动的问题。

渲染部分

各种不同方案的GPU库,都会提供Open GL和EGL接口,供上层渲染框架使用。OpenHarmony的渲染框架上也是使用Open GL和EGL接口。

因为不能使用闭源库,我们需要使用开源GPU mesa3D编译提供的OpenGL库。

开源GPU驱动为Mesa3D,Mesa3D是用户态库,在内核态需要配套使用Panfrost驱动。

OpenHarmony 3.2版本,已经提供了快速集成编译开源GPU的方法,相比3.1Release版本,适配过程已有很大简化,具体方法也不在此赘述。

更需要注意的是,8541e使用的是GPU是Mail T820,GPU架构比较老,不仅开源GPU Mesa3D的适配会有问题,而且OpenHarmony XTS认证也会有问题。因为,Mail T820与Mesa3D的组合,并没有通过OpenGL CTS测试;而OpenHarmony3.2版本的XTS会测试OpenGL CTS的满足度;当出现相关XTS问题的时候,需要去分析澄清。

合成部分

默认没有适配的情况下,采用CPU合成,合成效率很低,一帧需要80~100ms,帧率才10几。好在8541e芯片提供了专门的硬件GSP和DPU来提高合成效率,同时GPU也可以承担一部分合成工作,因此需要把硬件合成用起来,提高流畅度等使用体验。

主要方案是:使用GSP+DPU+GPU组合起来进行硬件合成。GSP、DPU、GPU的适用场景不同,比如当图层数目大于4的时候,或者在旋转的时候,需要使用GSP。在8541e上,dpu也不够强大,部分场景还需要GPU来合成。

主要工作:

1、移植GSP、DPU驱动

2、适配合成HDI接口,根据情况合理使用GSP、DPU、GPU进行合成。

需要注意的是:使用GSP或者DPU合成时,可以调用GSP、DPU的用户态程序接口,而使用GPU合成时,不能直接调用接口,而是设置GPU合成标志,让流程重新走回渲染,在渲染阶段调用GPU完成合成工作。

多模输入子系统

OpenHarmony采用udev管理输入设备节点,确保udev的输入规则集/etc/udev/rules.d/touchscreen.rules中,有规则与内核驱动的输入设备属性能匹配上,一般默认都有,不需要适配什么。

移植4.14的8541e输入驱动,确保内核驱动能将输入事件正确记录到dev设备节点。

WiFi

主要移植内核驱动,系统已对接好wpa,没有多少适配工作 。

Bluetooth

芯片厂家在hal层有提供vendor lib,将Bluetooth HDI接口对接到vendor lib即可。

由于芯片厂家vendor lib提供的接口,与OpenHarmony Bluetooth HDI需要的接口,不完全一致,需要修改。

社区提供的rk3568示例,是直接修改了芯片厂家的vendor lib库,让能够直接对接OpenHarmony Bluetooth HDI,但这样不利于各自独立演进,当后续芯片厂家的vendor lib库需要升级时,会产生较大的维护工作量。

我们采用的是增加vendor lib的adapter层,在adapter层去做接口转换,保障OpenHarmony Bluetooth和厂家的vendor lib能各自独立演进。

电话子系统

8541内置了Modem芯片,支持4G能力。

OpenHarmony的电话子系统,在HAL层的RIL适配部件采用的是hril_hdf、hril、vendorlib三层架构(如下图),适配不同的芯片或者外接模组主要在vendorlib层进行对接。

OpenHarmony社区示例产品rk3568,在vendorlib层对接了外接模组的at指令,但这种适配方案不适合8541等ZR芯片。

芯片厂家的8541e Modem方案中,有自己的rild程序,已经完整的实现了ril层功能,我们不需要再从最底层AT去适配重新去造一个ril,使用厂家的ril程序质量上也更有保障。

因此,整体方案为:rild改造为ril lib闭源库,OpenHarmony RIL适配部件在vendorlib对接厂家ril lib,摒弃原来的AT实现方式。

具体方案如下图:

关键工作有:

1、内核驱动移植

2、集成原厂闭源二进制程序和闭源库

2.1 保留原厂modem control、cp disk、ref notify等原生二进制程序。

2.2 改造rild程序为ril lib闭源库

3、OH适配
3.1 OH启动时拉起原厂二进制程序,使能和配置好Modem。

3.2 实现Vendor Lib,适配对接sprd ril lib

在Vendor Lib中需要逐个适配各指令接口,包括下发和主动上报接口;仅数据功能,就有60+接口。

接口传递的数据结构差异较大,需要在适配层转换,部分缺失的信息需要sprd ril lib中补充;

部分逻辑需要修改,指令异步机制,指令时序不一样,等等。

4、HCS根据设备能力和业务需求进行配置

Camera

OpenHarmony的Camera驱动框架也是多层架构,对上提供HDI接口,对下兼容不同平台实现。

在Platform Adatper层,提供了MPP和V4L2两种架构的对接方案,社区上Hisi产品采用MPP架构,其他大部分产品采用Linux标准的V4L2架构。

8541e原厂的Camera驱动,并没有使用标准的V4L2,主要是由用户态的Unisoc Camera OEM子系统实现,里面包括大量的闭源部分和大量的有源码部分。

但基于Unisoc Camera OEM,可以封装提供“仿冒的”V4L2接口(原厂有类似样例),这让双方在不破坏各自架构的前提下,有了快速对接的可能性。

最终对接方案如下:

关键点有:

1、内核Kernel移植。包括DCAM驱动和Sensor驱动。

2、集成原厂闭源库。包括3a算法在类的10+个闭源库。

3、开源库移植。包括Unisoc Camera OEM接口、sensor接口等15+个开源库,涉及源码75万行以上。

4、OH适配。在Platform Adapter选用V4L2模型,对接厂家适配库V4L2 Adapter,但需要改造V4L2模型的适配源码。

4.1 修改使用原厂API接口来实现,不再使用Linux V4L2设备节点;

4.2 同时,修改适配原厂闭源库逻辑,比如取buffer的方式、设备匹配的方式,等等。

4.3 Sensor修改 Codec转码使用厂家硬件转码库,如libjpeg,来提升性能。

4.4 HCS根据设备能力和业务需求进行配置

Audio

原厂SDK支持ALSA框架,OpenHarmony也支持对接ALSA框架,因此基于libalsa三方库来进行对接。

位置子系统GNSS

与OpenHarmony部分子系统类似,GNSS驱动框架也是多层分离的架构,对上提供统一的HDI接口,对下预留了vendorlib做不用芯片的适配。

GNSS驱动框架按功能可以分为三部分:gnss(基础定位)、agnss(辅助定位)、geofence(地理围栏),每部分可以单独与vendorlib对接。

8541e采用vendorlib来适配对接芯片厂家的vendorlib,主要完成了gnss基础定位功能的适配对接,agnss辅助定位和地理围栏的适配对接方法类似。

主要工作有:

1、移植gnss驱动

2、集成原厂gnss闭源库

3、实现vendorlib,对接原厂闭源库

相关文章:

芯片解决方案--SL8541e-OpenHarmony适配方案

摘要 本文描述8541E芯片适配OpenHarmony的整体方案。 本文描述的整体方案,不止适用于8541e,也适用于该芯片厂家的其他芯片,如7863、7885,少部分子系统会略有差异。 整体方案架构 整体方案架构如下图,遵循OpenHarmo…...

Spring Boot之数据访问集成入门

Spring Boot中的数据访问和集成支持功能是其核心功能之一,通过提供大量的自动配置和依赖管理,极大地简化了数据访问层的开发。Spring Boot支持多种数据库,包括关系型数据库(如MySQL、Oracle等)和非关系型数据库&#x…...

Learn ComputeShader 09 Night version lenses

这次将要制作一个类似夜视仪的效果 第一步就是要降低图像的分辨率, 这只需要将id.xy除上一个数字然后再乘上这个数字 可以根据下图理解,很明显通过这个操作在多个像素显示了相同的颜色,并且很多像素颜色被丢失了,自然就会有降低分…...

Java学习第七天

成员方法分类: 静态成员方法(有static修饰 属于类)建议用类名访问,也可以用对象访问 实例成员方法(无static修饰 属于对象)只能用对象出发访问 使用static来定义一些工具类 工具类直接使用类名.方法调用即…...

深入剖析 Redis 基础及其在 Java 应用中的实战演练

引言 在现代分布式系统和高并发应用中,缓存系统是不可或缺的一环,而 Redis 作为一种高性能的内存数据存储以其丰富的数据结构和快速的读写性能,成为了众多开发者的首选。本篇博客将详细介绍 Redis 的基础知识,并通过 Java 代码演…...

Why I‘m getting 404 Resource Not Found to my newly Azure OpenAI deployment?

题意:为什么我新部署的Azure OpenAI服务会出现404资源未找到的错误? 问题背景: Ive gone through this quickstart and I created my Azure OpenAI resource created a model deployment which is in state succeedded. I also playaround …...

【word导出带图片】使用docxtemplater导出word,通知书形式的word

一、demo-导出的的 二、代码操作 1、页面呈现 项目要求,所以页面和导出来的word模版一致 2、js代码【直接展示点击导出的js代码】 使用插件【先下载这五个插件,然后页面引入插件】 import docxtemplater from docxtemplater import PizZip from pizzip …...

微信小程序路由跳转之间的区别

navigateTo: 功能描述: navigateTo用于保留当前页面,跳转到应用内的某个页面。但是不能跳到 tabbar 页面。 页面栈变化: 当使用navigateTo进行页面跳转时,当前页面会被推入页面栈中,但不会被销毁&#xff0…...

centos安装docker并配置加速器

docker安装与卸载: 1、检查当前是否安装docker yum list installed | grep docker2、卸载docker 根据yum list installed | grep docker查询出来的内容,逐个进行删除 yum remove docker.x86 64 -y3、启动与关闭docker 4、删除/etc/docker文件夹 如果…...

【软件测试】设计测试用例

目录 📕引言 🍀测试用例 🚩概念 🚩设计测试用例的万能公式 🏀常规思考逆向思维发散性思维 🏀万能公式 🎄设计测试用例的方法 🚩基于需求的设计方法 🏀明确需求中…...

Kafka【十三】消费者消费消息的偏移量

偏移量offset是消费者消费数据的一个非常重要的属性。默认情况下,消费者如果不指定消费主题数据的偏移量,那么消费者启动消费时,无论当前主题之前存储了多少历史数据,消费者只能从连接成功后当前主题最新的数据偏移位置读取&#…...

Python 的语法元素(容易忘记的)

文章目录 同步赋值同步赋值的相关操作同步赋值的原理 同步赋值 同步赋值是 Python 语言的一个强大功能,它让代码更加紧凑和高效,尤其是在处理多个变量时。 同步赋值的相关操作 简单同步赋值: 如果你想同时初始化多个变量到不同的值&#x…...

找到字符串中所有字母异位词问题

欢迎跳转我的主页:羑悻的小杀马特-CSDN博客 目录: 一题目简述: 二思路汇总: 三解答代码: 一题目简述: leetcode题目链接:. - 力扣(LeetCode) 二思路汇总: …...

QEMU用户模式测试AARCH64程序

QEMU的两种模式 QEMU(快速模拟器)是一个开源的机器模拟器和虚拟化器,它能够模拟多种处理器架构,并且可以在不同平台上运行。QEMU 支持两种模式:用户模式和系统模式。 用户模式(User Mode)&…...

机器学习(五) -- 监督学习(8) --神经网络2

机器学习系列文章目录及序言深度学习系列文章目录及序言 上篇:机器学习(五) -- 监督学习(8) --神经网络1 下篇: 前言 tips:标题前有“***”的内容为补充内容,是给好奇心重的宝宝看…...

物联网之PWM呼吸灯、脉冲、LEDC

MENU 前言原理硬件电路设计软件程序设计analogWrite()函数实现呼吸灯效果LEDC输出PWM信号 前言 学习制作呼吸灯,通过LED灯的亮度变化来验证PWM不同电压的输出。呼吸灯是指灯光在单片机的控制之下完成由亮到暗的逐渐变化,感觉好像是人在呼吸。 原理 脉冲宽…...

Python利用pyecharts实现数据可视化

小编会持续更新知识笔记,如果感兴趣可以三连支持。闲来无事,水文一篇,不过上手实践一下倒还是挺好玩的,这一块知识说不定以后真可以尝试拿来做数据库的报表显示。 有梦别怕苦,想赢别喊累。 目录 前言 JSON数据格式的…...

网恋照妖镜源码搭建教程

文章目录 前言创建网站1.打开网站设置 配置ssl2.要打开强制HTTPS,用宝塔免费的ssl证书即可,也可以使用其他证书,必须是与域名匹配的3.上传文件至根目录进行解压4.解压后,修改文件 sc.php 里面的内容5.其余探索 前言 前俩年很火的…...

STM32

(以下操作环境为Keil5和proteus8.9) 八种输入输出模式及他们的工作模式 分析如下 总线:总线提供了数据在不同组件(如处理器、内存、输入输出设备等)之间传输的路径,使数据能够快速、准确地在系统内流动。 …...

用手机做抢答器 低预算知识竞赛活动的选择

使用手机作为抢答器是低预算竞赛活动的一个理想选择。随着智能手机的普及,传统抢答器已经被手机抢答器所替代,这种转变不仅降低了成本,而且提供了更大的灵活性和便利性。通过手机扫码登录竞赛软件,参赛者可以直接在手机上进行抢答…...

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

接口测试中缓存处理策略

在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

Java 加密常用的各种算法及其选择

在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...

招商蛇口 | 执笔CID,启幕低密生活新境

作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...