简述Fuchsia启动引导顺序

本篇简述fuchsia系统几个核心manager的启动引导顺序。

第一步 appmgr

appmgr的任务是管理环境树和在环境中创建进程。被appmgr创建的进程拥有和它所在通信的通道zx::channel,通过该通道这些进程还可以进一步创建其他进程或者是嵌套的环境。

1
2
tips:
环境 可以理解为是管理一组应用的接口,应用运行在环境中,环境提供这些应用运行所必须的服务,并对应用进行生命周期进行管理。

在启动时,appmgr会创建一个根环境,并在根环境中执行/system/data/appmgr/initial.config 文件中列出的初始化app,这些app会在根环境中创建嵌套的环境。该配置文件默认配置的应用为:bootstrap。

第二步 sysmgr

sysmgr的职责是创建引导环境,并在引导环境中创建一系列的初始化组件。
在引导环境中运行的sysmgr所提供的服务并非是bootstrp程序提供的。当sysmgr接收到对某服务的请求时,sysmgr会查找实现了该服务的应用然后启动它并创建服务,然后将对服务的请求转发给该服务。具体组件和服务的映射关系表存储于文件/system/data/bootstrap/services.config中。后续对同一服务的请求都将转发给运行起来的该服务。如果服务终止了,则后续服务的请求将导致该服务被重新启动。
sysmgr在启动过程中还会在引导环境创建一系列的其他组件,这些组件定义于/system/data/bootstrap/apps.config 文件

第三步 basemgr

basemgr的职责是加载用户交互相关的流程:用户登录和用户管理
它首先会访问系统的根view,然后启动设备shell,在根view中绘制设备Shell(shell的定义参考Fuchsia模块化的四大组件之三,此处的shell 为baseshell)的UI以展示给用户交互界面。它同时通过User Provider FIDL API向外提供用户管理相关的数据库的服务。通过此API,设备shell可以进行用户的创建、删除、修改,以某用户进行登录或者是进行匿名登录。
添加新用户是使用帐户管理器服务完成的,该服务可以与身份提供程序进行对话,以获取访问用户ledger的id token。
当以一个已存在用户登录时,会开启一个sessionmgr实例,该会话会与用户的id token相绑定,也会和一个映射到basemgr命名空间的命名空间相绑定。
当以访客身份登录时,则不会有相应的用户id token,且会话的命名空间将是一个临时的命名空间。

robot wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
坚持原创技术分享,您的支持将鼓励我继续创作!