欢迎光临散文网 会员登陆 & 注册

OHOS(2) init

2023-07-15 13:09 作者:FineClassFuture  | 我要投稿

启动

https://docs.openharmony.cn/pages/v4.0/zh-cn/device-dev/subsystems/subsys-boot-overview.md/

    init组件,init(elf) 读取init.cfg然后执行其内容任务,其中有了点小变化,即所谓的“安全性”“微服务”。

https://docs.openharmony.cn/pages/v4.0/zh-cn/device-dev/subsystems/subsys-boot-ref.md/



沙盒

    https://docs.openharmony.cn/pages/v4.0/zh-cn/device-dev/subsystems/subsys-boot-init-sandbox.md/

基本概念

    在init里面创建系统组件沙盒和芯片组件沙盒,native服务根据功能进入system沙盒或者chipset沙盒。在system-sandbox.json、chipset-sandbox.json等配置文件中设置沙盒组件中mount bind 的目录或文件,实现沙盒组件通过mount属性进行隔离。同时,提供了一种沙盒调试工具,当需要在沙盒内验证或者进行沙盒相关开发时,方便对需求进行调试、验证、完善。begetctl沙盒命令参考: begetctl命令说明

约束与限制

    仅标准系统下使用。


    其实就是linux namespace,docker的核心关键技术,linux kernel内部提供的功能

(来自网络文章简介)

    namespace 是 Linux 内核用来隔离内核资源的方式。通过 namespace 可以让一些进程只能看到与自己相关的一部分资源,而另外一些进程也只能看到与它们自己相关的资源,这两拨进程根本就感觉不到对方的存在。具体的实现方式是把一个或多个进程的相关资源指定在同一个 namespace 中。

    Linux namespaces 是对全局系统资源的一种封装隔离,使得处于不同 namespace 的进程拥有独立的全局系统资源,改变一个 namespace 中的系统资源只会影响当前 namespace 里的进程,对其他 namespace 中的进程没有影响。

    Linux 提供了多个 API 用来操作 namespace,它们是 clone()、setns() 和 unshare() 函数,为了确定隔离的到底是哪项 namespace,在使用这些 API 时,通常需要指定一些调用参数:CLONE_NEWIPC、CLONE_NEWNET、CLONE_NEWNS、CLONE_NEWPID、CLONE_NEWUSER、CLONE_NEWUTS 和 CLONE_NEWCGROUP。如果要同时隔离多个 namespace,可以使用 | (按位或)组合这些参数。同时我们还可以通过 /proc 下面的一些文件来操作 namespace。

    从版本号为 3.8 的内核开始,/proc/[pid]/ns 目录下会包含进程所属的 namespace 信息



init(elf) 

    之前简单版的已了解,现在的版本只是添加了沙盒和启动服务代码的框架化。

    还是在base/startup/init/services/init下

  1. init进程启动后,会挂载tmpfs,procfs,创建基本的dev设备节点,提供最基本的根文件系统。

  2. init也会启动ueventd监听内核热插拔设备事件,为这些设备创建dev设备节点。包括block设备各个分区设备都是通过此事件创建。

  3. init进程挂载block设备各个分区(system,vendor)后,开始扫描各个系统服务的init启动脚本,并拉起各个SA服务。读取init.cfg配置文件,根据解析结果,执行相应命令并依次启动各关键系统服务进程,在启动系统服务进程的同时设置其对应权限。

    (这部分,在最后做产品(不做OH认证情况下)时,会修改为自己的代码流程,做自己的更简单的init任务)


xx.cfg

https://docs.openharmony.cn/pages/v4.0/zh-cn/device-dev/subsystems/subsys-boot-init-cfg.md/


启动配置文件(init.cfg),文件由jobs、services和import组成。

    services(linux内核支持), 用于配置系统支持的native服务,服务具体配置参考 服务管理

    jobs, 配置等待执行命令集合,jobs具体参考 jobs管理

    import(linux内核支持),import是导入cfg文件,目的是减少cfg大小,分离不同的功能。


init.cfg默认配置文件,由init系统定义,优先解析。

/system/etc/init/*.cfg各子系统定义的配置文件。

/vendor/etc/init/*.cfg厂商定义的配置文件。


    还有一些 设备系统等信息


除了沙盒也没有什么特别的,就是那么回事:为了规范、安全,就要立规矩、立框架,然后越来越复杂。(这其实就是linuxkernel宏内核经历过的事)



OHOS(2) init的评论 (共 条)

分享到微博请遵守国家法律