从启动日志简单梳理Openharmony启动流程

前言

出于对开源鸿蒙的好奇,笔者借助几位大佬的博文,根据小型系统的启动日志,对 Openharmony 运作流程进行了梳理。由于个人编译的是最新版本,其源码部分与参考博文中有较多出入,但实现机制是不变的。

参考的博文如下:
《OHOS3.0启动流程分析丨init阶段》
《鸿蒙系统的启动流程v2.0》

编译运行

笔者在 qemu 上运行 qemu-system-small 系统,日志输出如下图
在这里插入图片描述

问题描述

由于笔者最近刚了解了小部分的内核实现,因此在探究 OHOS 过程中,更多地是带着问题去进行对比学习。让笔者困惑的主要有几个问题:

1 . 内核在OHOS中扮演什么角色?

2 . 与应用程序 app 的执行有什么关系

3 . OHOS的app是如何执行的?

4 . 分布式功能是如何实现的?

init 进程

由于对内核启动已经有了初步了解,因此本文重点不再探讨内核启动过程,而是自问自答一下,内核到 app 的过程是怎样的。可以从日志中看到关于内核log内容:
在这里插入图片描述

在Linux内核学习系列中,可以得知内核启动后会执行 init() 方法,进而通过 fork+exec 的方式启动 /bin/sh 这一 shell 程序。在 OHOS 中,将 /bin/sh 更换成了 /bin/init。而其源码的入口地址位于 base/startup/init_lite/services/init/main.c

int main(int argc, char * const argv[])
{
   
    int isSecondStage = 0;
    // Number of command line parameters is 2
    if (argc == 2 && (strcmp(argv[1], "--second-stage") == 0)) {
   
        isSecondStage = 1;
    }
    if (getpid() != INIT_PROCESS_PID) {
   
        INIT_LOGE("Process id error %d!", getpid());
        return 0;
    }

    if (isSecondStage == 0) {
   
        SystemPrepare();
    } else {
   
        LogInit();
    }
    SystemInit();
    SystemExecuteRcs();
    
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值