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

news2024/12/23 13:24:57

摘要

本文描述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,对接原厂闭源库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2114450.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

4K4D: Real-Time 4D View Synthesis at 4K Resolution 学习笔记

本文是学习4K4D的笔记记录 Project Page:https://zju3dv.github.io/4k4d/ 文章目录 1 Pipeline1.1 特征向量的计算1.2 几何建模1.3 外观建模⭐1) 球谐函数SH模型2) 图像融合技术 1.4 可微分深度剥离渲染 2 Train(loss)…

2024/9/6黑马头条跟学笔记(四)

D4内容介绍 阿里三方安全审核 分布式主键 异步调用 feign 熔断降级 1.自媒体文章自动审核 1.1审核流程 查文章——调接口文本审核——minio下载图片图片审核——审核通过保存文章——发布 草稿1,失败2,人工3,发布9 1.2接口获取 注册阿…

云原生之WEB应用服务器Tomcat(持续更新中)

WEB应用服务器Tomcat 1.Tomcat功能介绍1.1 安装Tomcat1.2 生成启动文件 2.结合反向代理实现Tomcat部署2.1 利用nginx反向代理实现 3.Memcached(解决sion丢失问题)3.1 简介3.2 安装与启动 4.session 共享服务器 1.Tomcat功能介绍 Tomcat 服务器是一个免费…

Cmake之2.6版本重要特性及用法实例(十一)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【…

西班牙语语法之西语前置词学习柯桥学外语到银泰对面

前置词用法大盘点 ▼ 1.a 表示行进的方向: Voy a la playa. 我要去海滩。 表示具体的位置: al norte del palacio 在宫殿北侧。 表示具体的时间: Me levanto a las 6. 我6点起床。 表示命令: ¡A trabajar! 工作&#…

linux服务器之top命令详解

top:系统资源管理器 top命令类似于windows的任务管理器,可以查看内存、cpu、进程等信息(动态查看系统资源信息)在linux系统中常用top命令查看资源性能分析工具 一、参数释义: 第一行 系统时间和平均负载 top:名称22:12:46&#…

[数据结构] 哈希结构的哈希冲突解决哈希冲突

标题:[C] 哈希结构的哈希冲突 && 解决哈希冲突 水墨不写bug 目录 一、引言 1.哈希 2.哈希冲突 3.哈希函数 二、解决哈希冲突 1.闭散列 I,线性探测 II,二次探测 2.开散列 正文开始: 一、引言 哈希表是一种非常实用而…

移动UI:分类列表页、筛选页的设计揭秘。

移动UI的列表页设计需要考虑用户体验和界面美观性,以下是一些建议的设计要点: 1. 列表项的展示: 列表页应该清晰地展示各个列表项,包括标题、副标题、缩略图等内容,以便用户快速浏览和识别。可以使用卡片式布局或者简…

计算机毕业设计选题推荐-班级管理系统-教务管理系统-Java/Python项目实战

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

多云架构下大模型训练的存储稳定性探索

一、多云架构与大模型训练的融合 (一)多云架构的优势与挑战 多云架构为大模型训练带来了诸多优势。首先,资源灵活性显著提高,不同的云平台可以提供不同类型的计算资源和存储服务,满足大模型训练在不同阶段的需求。例…

机器学习之监督学习(四)决策树和随机森林

机器学习之监督学习(四)决策树和随机森林 0. 文章传送1. 决策树 Decision Tree案例引入构建过程 0. 文章传送 机器学习之监督学习(一)线性回归、多项式回归、算法优化[巨详细笔记] 机器学习之监督学习(二)…

YOLOv8改进实战 | 注意力篇 | 引入ICCV2023顶会LSKNet:大选择性卷积注意力模块LSKA,助力小目标检测

YOLOv8专栏导航:点击此处跳转 前言 YOLOv8 是由 YOLOv5 的发布者 Ultralytics 发布的最新版本的 YOLO。它可用于对象检测、分割、分类任务以及大型数据集的学习,并且可以在包括 CPU 和 GPU 在内的各种硬件上执行。 YOLOv8 是一种尖端的、最先进的 (SOTA) 模型,它建立在以前…

Leetcode JAVA刷刷站(113)路径总和 ||

一、题目概述 二、思路方向 为了找出从根节点到叶子节点路径总和等于给定目标和的所有路径,我们可以使用深度优先搜索(DFS)的方法。在遍历过程中,我们维护一个当前路径的和以及一个列表来存储当前路径的节点值。当我们到达一个叶…

HarmonyOS云端开发(二)

文章目录 登录认证服务以及云数据库使用一创建登录注册页面二、开启认证服务二、创建数据表1.导出数据表2.使用表 进行增删改查3.查看云数据库 登录认证服务以及云数据库使用 云端开发不需要存储token,由提供的API统一验证,假设未登录则跳转登录页,已登…

uniapp,vite整合windicss

官方文档:https://weapp-tw.icebreaker.top/docs/quick-start/frameworks/hbuilderx 安装: npm i -D tailwindcss postcss autoprefixer # 初始化 tailwind.config.js 文件 npx tailwindcss initnpm i -D weapp-tailwindcss# 假如 tailwindcss 在 weap…

nginx 新建一个 PC web 站点

注意:进行实例之前必须完成nginx的源码编译。(阅读往期文章完成步骤) 1.编辑nginx的配置文件,修改内容 [rootlocalhost ~]# vim /usr/local/nginx/conf/nginx.conf 2.创建新目录/usr/local/nginx/conf.d/,编辑新文件…

JavaScript (输出,语句,语法)

目录 JavaScript 输出 使用window.alert() 写入警示框 使用document.write() 写入HTMl输入 使用 innerHTML 写入html元素 使用console.log()写入 浏览器控制台 JavaScript 语句 实例 语句组成 分号 关键字 JavaScript 语法 JavaScript 标识符 …

【Hadoop|MapReduce篇】MapReduce概述

1. MapReduce定义 MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。 MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。 2. Map…

项目——负载均衡OJ

项目要实现的一个整体的功能: 编写一个在线OJ网络服务器,只实现类似 leetcode 的题目列表在线编程功能 项目宏观结构: Oj服务器在收到提交的代码时,把代码负载均衡的选择发送给其他几个编译与运行服务器去编译运行代码,判断代码的编译运行结…

springboot+vue+mybatis计算机毕业设计气象数据分析与可视化系统+PPT+论文+讲解+售后

随着互联网技术不断地发展,网络与大数据成为了人们生活的一部分,而气象数据分析与可视化系统 作为网上应用的一个全新的体现,由于其特有的便捷性,已经被人们所接受。目前主流的气象数据分析与可视化系统 服务不仅不明确并且管理…