目录

  • 前言
  • 1.总体框架
  • 2.模块及逻辑分析
  • 3.模块详细分析
    • 3.1分布式软总线模块
    • 3.2分布式框架模块
    • 3.3系统服务管理模块
    • 3.4HUKS密钥管理模块
    • 3.5设备认证模块
    • 3.6Utils模块
  • 原参赛文章

前言

  • 感谢同组各位师哥的代码分析与整理
  • 软件国产化潮流与美国技术封锁下,华为在原有的物联网操作系统上结合手机、平板等移动设备操作系统。自主研发鸿蒙分布式系统。截至目前鸿蒙系统已经更新到3.0版本。当前鸿蒙系统接入智慧屏、车载终端、IOT穿戴设备、平板、手机等终端上。
  • 鸿蒙系统实现模块化解耦合,有4层架构,分别为内核层、系统服务层、应用框架层、应用层。同时实现四个子系统集,分别为系统基本能力子系统集,基础软件服务子系统集,增强软件服务子系统集,硬件服务子系统集。开发者通过拉取不同子系统,可以完成对应的APP开发。而4个子系统集中,核心为系统基本能力子系统集,这是整个鸿蒙系统的地基。所以本次比赛我们将从系统基本能力子系统集中分布式软总线出发,一层一层剖析,分析出鸿蒙系统底层的基础架构。

1.总体框架

  • 结合鸿蒙操作系统开源代码,分析出新模块:全球化子系统、测试模块、编译构建、启动恢复、三方库、vender其他硬件平台、domains、微服务、电源管理等模块,结合官方图整理出如下模块划分图:
  • 系统的功能按照系统->子系统->功能/模块。详细的模块间逻辑分析将在下一小节中讲述。

2.模块及逻辑分析


3.模块详细分析

3.1分布式软总线模块

  • OpenHarmony(v1.x)分布式软总线实现了局域网设备间的分布式通信能力管理,提供了不区分通信协议的统一的设备发现和传输接口以及基于mbedtls第三方库的安全通信环境。

  1. 设备发现
     a. 发现端在广播发起discover请求后,使用coap协议在局域网内发送广播
     b. 被发现端设备使用PublishService接口发布服务,接收端收到广播后,发送coap协议单播给发现端
     c. 发现端设备收到报文会更新设备信息
  2. 设备认证
     软总线为设备间信任关系的建立提供数据传输通道。
  3. 会话管理
     软总线为业务层提供基于会话传输功能,业务可以通过会话ID收发数据或获取其相关基本属性,当前版本只实现被动接收会话连接的功能。

3.2分布式框架模块

  • 分布式任务调度模块主要功能为服务的定义和注册、特性的定义和注册,服务和特性注册完成后向软总线发布,软总线创建一个Session会话,用于解析会话数据,并根据解析得到的命令id启动Ability。阅读可以参照如下思维导图:

  • 结合上述的目录分析以及之前本模块的博客代码详解,可以构建出以下模块架构图:

  • 接下来拆分分布式框架模块,进行简单的剖析。
     首先是服务和特性的定义和初始化,在注册特性之前,需要注册一个同名的服务。服务和特性都使用了唯一的samgr对象进行注册,之后向软总线发布服务,samgr启动一个任务池,并由软总线创建一个Session会话,用于之后的会话数据解析。

     软总线创建会话服务后,注册了一个Session回调函数,回调函数中包含三个成员,分别是会话打开处理函数、会话关闭处理函数和会话接收处理函数,会话打开处理函数和会话关闭处理函数中除了简单打印函数调用日志外没有做其他特殊的工作。主要实现细节在会话接收处理函数中,该函数中封装了通信数据,并对其进行处理。首先将byte数据转换为TlvNode格式,然后根据解析后的TlvNode格式的数据获取到对应的命令id,根据命令id执行相应的动作,其中一个命令id对应的动作就是启动FA。

     根据命令id调用远程启动Ability处理函数。从TlvNode格式数据中获取到包名、Ability名和签名并封装为一个权限信息检查结构体,执行权限检查,检查通过后注册一个IPC回调函数,之后构造一个Want,启动Ability。


3.3系统服务管理模块

  • 分布式任务调度之系统服务管理模块可以划分为三大部分,分别是屏蔽底层平台差异的接口适配层、服务和功能的注册/发现/初始化/启动、同进程/跨进程通信管理。关于它们更多的细节可以参考文末的文章链接。本部分的代码概述分析图如下:


3.4HUKS密钥管理模块

  • HUKS密钥管理模块大致可分为根主密钥管理组件、密钥库组件、功能服务组件和服务对外接口。根主密钥组件是整个密钥系统安全性的根本,他通过分层密钥机制,来保证各个层密钥的安全。 密钥库组件用来存储工作密钥信息,其主要负责密钥信息的加载与同步。功能服务组件是HUks密钥系统提供的密钥和安全功能,服务对外接口封装功能服务组件使上层忽略功能的具体实现,只需调用接口函数就能应用服务。


3.5设备认证模块

  • 此模块是为保证用户个人数据在多个设备间的安全传输以及设备间建立安全连接的能力。当前版本设备认证模块通过交换主控设备与配件设备的身份标识来建立点对点信任关系,身份标识是指椭圆曲线密钥对。

  • 设备认证模块的内容如下图所示,本文重点分析该模块的关键技术点:HiChain机制数据接收管理、PAKE协议流程、STS协议流程。

  • 通过对上述模块的具体分析,得到如下图所示的设备间信任关系建立流程图。

  • HiChain机制数据接收管理
     HiChain机制是OpenHarmony实现设备互联安全的一种机制,HiChain通过建立子对象的形式管理客户端和服务端的设备认证数据处理,本次博客重点分析了HiChain的数据接收管理过程。

  • PAKE协议通信流程
     在设备认证过程中,pake协议用于认证会话密钥协商,基于该会话密钥,双方可以安全地交换各自的身份公钥。

  • STS协议通信流程
     当建立过信任关系的主控设备与配件设备间进行通信时,双方将相互交换身份公钥,并通过检查本地是否存储对端身份信息的方式确认对端与本设备的信任关系。进一步地,基于双方的身份公私钥对,通信对端设备可以基于STS协议进行密钥协商并建立安全通信通道,支撑设备间通信数据的端到端加密传输。


3.6Utils模块

  • Utils库阅读学习没有特定起始位置,这也是跟代码耦合度低有关系,所以我们可以从下图的任意一个分支入手学习:

  • 由图可知,Utiles库实现鸿蒙系统所有类型系统平台(lite,base)通用的基础组件(基础库,基础数据库),这些基础组件支撑起上层子系统以及的应用。
     针对lite平台提供的能力有:KV存储,文件操作,定时器,Doup系统属性,JS API
     针对base平台提供的能力有:
     1、文件、目录、字符串相关操作库。
     2、读写锁、信号量、定时器、线程、线程池等基础数据结构。
     3、线程安全数据STL。
     4、C语言安全函数接口。
     5、各子系统错误码定义。
     6、安卓系统进程间通信数据结构parcel_binder。
     7、观察者、单例设计模式框架。
     上述提供的能力中,文件、目录、字符串相关操作库是基于linux库系统调用实现。而读写锁、信号量、定时器、线程、线程池等数据结构基于posix,采用C++封装成类或者抽象类,以便开发者继承、实现。
     尤其是各子系统错误码定义模块,鸿蒙系统采用一个uint类型变量存储,并将其中的32位分成4部分,详情见下图,主体为保留位+子系统+模块+错误类型。我们可以举一个例子: 分布式调度子系统的值为14,子系统中的模块a为1,errorOK为0,则可以采用移位表示:(14<<21)|(1<<16)+0


原参赛文章

  • GitLink|确实开源——参赛文章地址

  • 再次感谢师哥队友们的努力!!!