鸿蒙系统全面揭秘!腾讯开发工程师不吹不擂带你深化剖析发布时间:2021-07-10 04:36:32 来源:优游平台登录 作者:优游官方app

  国内涵计算机根底中心范畴缺少建树,一向没有自主知识产权的操作系统。之前又出过多起比如汉芯,红芯浏览器等造假作业,犹如实践国际的狼来了,使国人对任何打着自主知识产权宣扬的产品都会戴着放大镜去看,那么鸿蒙究竟是不是个破例?

  鸿蒙是个很泛的概念,鸿蒙不只一个操作系统,仍是一个生态。鸿蒙这个词在不同的场景下指代不同的东西。依据华为官方IDE DevEco Studio 的运用模板能够看出,现在鸿蒙支撑的设备有手机,平板,电视,手表,轿车,以及相机等小家电等等,不同的技能栈开发的运用支撑的设备品种也不同。其间Java类型的运用支撑的设备类型最为丰厚,JS类型的运用其次,C++运用支撑的类型最少。

  在非嵌入式范畴,鸿蒙指的是一款叫鸿蒙的手机操作系统,最近网上热议的此运用专为旧版鸿蒙打造令人疑窦丛生。

  总的来说,鸿蒙绝不只仅指的是操作系统,华为的野心也绝不止于此,华为是要打造一个叫鸿蒙的生态,咱们不扫除未来会有鸿蒙SDK植入其它厂商的设备,使这些设备也具有运转鸿蒙运用的才能,乃至是运转在传统的Windows、Linux上的设备,那么这些设备也能够说是一个鸿蒙设备,是鸿蒙生态的一部分。

  即开发出来的运用,能够掩盖多品种型的设备,屏蔽底层OS的差异,相似现在炽热的Flutter所处理的问题。

  在多设备兼容的根底上带来共同的,高功用的交互体会。能够理解为跨设备,跨渠道,跨网络的轻量Widget。

  要完结设备间的互联互通,那么安全无疑是特别重要的环节。这儿的问题是怎么确保正确的人运用正确的设备,消费正确的数据。即要处理如下三个问题:

  (1) 怎么确保顾客对设备的鉴权是安全的,确保设备是原厂出产,没有被篡改的?(正确的设备)

  2、各个系统组件或许服务假如存在问题能够直接重启服务,削减中心组件反常对整个系统的损坏,并按需安排系统服务。

  1、一切资源获取都需求经过IPC,IPC又有必要堕入内核,所以会导致频频的堕入内核,或许屡次复制,导致功用下降。当然IPC通讯功率跟着深化研究与技能发展逐步提高。

  LiteOS-A是HW依据LiteOS进行演进的,进行 多进程,多核,虚拟内存,IPC等从头封装,尽量相似于Linux,可是尽量简化内核完结。OpenHarmony LiteOS-A内核架构图:

  LiteOS-A相关于朴实的RTOS增强要害特性简介:多进程:依据task进行封装,较为简略的进程与线程调度(支撑时刻片和FIFO调度);

  多核:大局链表、一切CPU同享,支撑闲暇轮询调度(不支撑负载均衡),可支撑亲和设置,可绑定核运转。

  虚拟内存:内核静态映射,静态映射提高真假转化功率,最有区间散布(0-1G用户空间,1-4G内核空间,削减用户态进程页表项),用户态经过缺页反常按需获取内存。动态链接:按需加载,多运用同享代码段,加载最小单元为页,符号绑定,支撑当即和延时绑定,加载地址随机化,进程代码段,数据段,仓库段地址随机化。而且运转规范ELF文件。

  进程通讯(IPC):支撑规范的posix进程间通讯,如Mqueue,pipe,fifo.signal。一同添加了Lite IPC(相似与Android binder可是简略得多),ROM和RAM占用不超越30K,抵达轻量,依据白名单操控的服务拜访权限,提高安全,经过内存映射完结单次复制,完结高效。

  系统调用:经过MUSL完结系统调用支撑syscall API和VDSO API。VDSO是削减系统调用开支的方法,Linux也支撑。确保服务与内核别离。而且服务和运用不能随意拜访内核。

  权限办理:进程粒度的权限区分与办理,完结DAC拜访操控,以进程UID的装备,灵敏区分文件资源归属与管控,供给UGO(user,group,other)的权限分配,满意根本的文件同享需求和Posix规范。

  虚拟文件系统:VFS办理根目录,挂载点内目录有FS办理。经过BCache和PCache提高文件系统读写速度。

  以上特性都根本上依据Linux的简化版别,坚持内核小型化,而且尽量具有Linux的功用特性。

  系统根本才能子系统集:为散布式运用在多设备上的运转、调度、搬迁等操作供给了根底才能,由散布式软总线、散布式数据办理、散布式使命调度、公共根底库、多模输入、图形、安全、AI等子系统组成。根底软件服务子系统集:供给公共的、通用的软件服务,由作业告诉、电话、多媒体、DFX(Design For X) 等子系统组成。增强软件服务子系统集:供给针对不同设备的、差异化的才能增强型软件服务,由才智屏专有事务、穿戴专有事务、IoT专有事务等子系统组成。硬件服务子系统集:供给硬件服务,由位置服务、生物特征辨认、穿戴专有硬件服务、IoT专有硬件服务等子系统组成。

  依据不同设备形状的布置环境,根底软件服务子系统集、增强软件服务子系统集、硬件服务子系统集内部能够按子系统粒度裁剪,每个子系统内部又能够按功用粒度裁剪。

  如上图所示,关于鸿蒙OS,其能够支撑各种内核(现在支撑Liteos-m,LiteOS-a,Linux)。其经过KAL层对上层供给共同的API接口才能。

  咱们能够清楚的看到KAL 支撑共同是经过支撑POSIX和CMSIS(针对arm Cotex-m 的笼统,做到在RTOS层面的尽量共同)对底层内核进行共同封装。做到依据上层API的程序能够在相应的CPU下编译通用,着重只能编译通用。

  POSIX表明可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX ),POSIX规范界说了操作系统应该为运用程序供给的接口规范。POSIX规范意在期望取得源代码等级的软件可移植性。换句话说,为一个POSIX兼容的操作系统编写的程序,应该能够在任何其它的POSIX操作系统(即使是来自另一个厂商)上编译履行。

  CMSIS(Cortex Microcontroller Software Interface Standard)规范,它是ARM同各个微操控器供货商、东西供货商和软件处理计划一同开发的Cortex微操控器软件接口规范。它使得微操控器和软件供货商能够运用共同的软件结构来开发Cortex微操控器的软件。

  CMSIS-RTOS是CMSIS的一部分,它自身是一种API规范,各厂商能够依据CMSIS-RTOS构建自己的实时操作系统(RTOS)。由于依据CMSIS-RTOS的API是规范化的,所以依据这些API开发的运用软件,不需求进行额定的移植开发作业,就可跑在任何支撑CMSIS-RTOS的OS上。跟着依据CMSIS-RTOS的中间件越来越多,支撑CMSIS-RTOS后的OS也会因而取得更多的中间件。

  OpenHarmony驱动首要布置在内核态,当时首要选用静态链接方法,随内核子系统编译和系统镜像打包。

  下列是相关系统的适配层,让相应的内核支撑HDF才能。然后驱动开发工程师经过drivers_framework供给的相关结构才能,编写HDF支撑的各种驱动,所以HDF共同驱动,是树立在对各种内核集成的HDF内核支撑驱动作为转化层。所以假如有新的内核需求适配,那么khdf需求依据相应的内核,进行移植,具有较大作业量。

  现在开源出来的openharmony计划整体束缚为在同一局域网下进行软总线互通。现在开源出来的仍是TCP/IP协议树立的局域网。鸿蒙发布会描绘的极简协议共同层,咱们并没有看到。

  g_sessionMgr->

  serverListenerMap[i] 用于存储session。SessionListenerMap结构中,最重要的是listener成员:onSessionOpened,是在会话创立时被回调的函数。onSessionClosed:是在会话结束时被回调的函数。onBytesReceived:是会话的数据抵达的回调函数,注册的模块能够经过这个函数接纳会话的报文,依照自己的格局进行解析,并履行会话要求的动作。例如:在散布式调度模块中,接纳的数据解析后,或许是START_FA的指令。

  咱们别离编写了鸿蒙的JS及Java运用,结合敞开出来的部分源码及文档,对App安装包进行了简略的逆向剖析。

  官方IDE DevEco Studio是依据开源的intellij的改造,能够用于本地调试的模拟器只支撑JS运用。Java运用截止现在只支撑长途模拟器(所谓散布式模拟器)不支撑本地模拟器。运转长途模拟器都需求账号密码登录,账号密码需求注册华为ID并实名认证,而实名认证需求上传身份证相片或许银行卡材料,长途调试由于网络和资源分配原因并不流通,流通度和画质方面不尽人意,开发体会有点儿糟糕。

  当然假如有真机,也能够运用真机进行开发调试,但华为这儿又设了两道门槛,开发鸿蒙运用需求两层签名认证,除了运用自身的签名,还要对运用工程进行签名。这两个签名都需求在鸿蒙开发者网站上注册,生成相应证书后方可安装到真机,过程适当繁琐。笔者搞这个签名走各种注册流程前后耗时一小时,对开发者不是很友爱,好在装备完结后,后续能够直接运用,算是一次性劳作。

  从现在的运用开发流程上看,今后开发鸿蒙运用有或许会对签名服务进行收费,笔者不由回想起了诺基亚,摩托罗拉年代,J2ME运用证书签名外包给第三方公司,一个运用签名收费2000元不然无法安装到用户手机,搞死生态的作业。生态还没起来,运用开发流程搞的如此杂乱,期望华为学习这个历史教训。

  鸿蒙运用UI结构有两套,支撑Java、JS,IDE里有默许的模板。这两套结构的区别是,Java结构只支撑鸿蒙Android系统,JS运用既支撑鸿蒙Android系统,也支撑鸿蒙嵌入式系统。鸿蒙JS运用在鸿蒙Android上是套了个Android运用的壳,这个壳会构建一个相似小程序的烘托环境,转化为Android的原生控件烘托,下文有打开剖析。JS运用比较Java运用,在排版才能,扩展性,兼容性方面存在必定的局限性,更适合做信息展现类的运用。

  对应的也有,Java和JS两套SDK,鸿蒙系统供给的名为Ability的运用结构也别离有Java和JS的完结。运用支撑哪些设备,能够在运用的config.json中声明。

  无论是js运用仍是java运用,代码终究编译出来包均为hap后缀,这个hap是未经hack的zip格局,能够运用规范的zip解压东西进行解压。

  由此能够看出,鸿蒙Android版要脱离Android系统难度还比较高,究竟中心的UI部分非自绘。

  从现在现已开源出来的部分上来看依据js开发的运用是一品种似小程序的开发方法,html,js,css首要会编译成jsbundle(编译东西自身未开源),jsbundle的履行不同的鸿蒙系统上有所区别。

  经过对openharmony代码剖析,在openharmony里Js运用是以自绘的方法烘托,支撑的UI组件看起来还比较完善(从源码里看制作部分好像参阅了部分flutter代码),运用三星的Jerry Js引擎,猜想是挖的三星的人?由于这个Js引擎实在太小众,Google V8他不香吗?

  UI组件结构在 ace_engine_lite 里,从开源的代码咱们看出支撑的UI组件还比较丰厚,除了惯例的控件,还包括列表,动画等杂乱控件的完结。

  实践在Android工程上,鸿蒙走的并不是自绘的计划,而是相似ReactNative的控件转化,ReactNative选用的是React的语法,而鸿蒙Android选用的是Vue的语法,从国内的开发者生态上来看,这是个正确的挑选。

  鸿蒙的这个用C++完结类VUE语法,在嵌入式上自绘,Android上控件转化的Js跨渠道烘托结构归于原创,惋惜的是鸿蒙Android这块并未开源,不能深化研究。

  (留意:尽管java运用和js运用在解压后目录结构好像差不多,文件命名也差不多,但其作业原理彻底不同。在Java运用里class.dex现已是鸿蒙运用的真实可履行代码。在js运用里class.dex仍是一个壳,这个壳用于打造履行Js运用的运转环境,真实的事务逻辑在app.js里。)

  鸿蒙运用层在规划上,依据自己的DSL和运用运转结构,在嵌入式设备上以自绘的方法烘托,在鸿蒙Android上经过适配层转化为Android原生控件烘托。这样的规划优势是减轻了作业量组件方面能够复用Android的生态,才能会更丰厚,究竟从零再打造一套完好且巨大的UI系统本钱太高,体会还不必定有Android做的好,而下风则是献身了可保护性,两套计划要各自独立保护,保护本钱较高,别的还或许带来兼容性的问题。从openharmony源码上看,依据自绘计划并没有预留给Android的扩展接口,targetos仅包括linux和liteos两种,由于烘托层架构不同,未来的改成共同的或许性也较低。

  鸿蒙OS并不定坐落对Windows、Android进行代替,而是剑指万物互联年代全场景、多终端的操作系统,与此相对应,鸿蒙OS(及大华为系统)一切的生态布局也将环绕万物互联打开。鸿蒙OS在完结细分场景的拓宽与跑马圈地后,鸿蒙OS将完善华为AIoT生态,进一步在才智城市、车联网(深化)、工业互联网三方面发力推动。

  中长期来看,鸿蒙OS与华为云+端芯片构成强壮合力,进军工业物联网。华为优质网络设备是IoT的衔接根底,衔接取得了很多数据,但只要经过智能剖析才能够构成杀手级运用。华为已在云侧和端测具有昇腾、鲲鹏、麒麟等芯片,具有强壮算力,叠加鸿蒙OS高效、灵敏的履行力,将培养很多高价值运用。依据近景和前景的生态蓝图,当时鸿蒙OS的发力抓手仍是以移动端为中心的HMS工业链。