andriod/linux开机启动流程

本文目录:

(一)整体概述

(二)BootLoader

(三)Kernel初始化

(四)Init初始化介绍

(a)Init.rc

(b)boottanim启动

(c)Surfaceflinger启动

(五)Zygote启动介绍

(a)app_process

(b)AppRuntime

(c)ZygoteInit

(六)SystemServer启动介绍

(a)AMS启动

(b)PackageMS启动

(七)Launcher启动介绍

(a)SystemUI启动

(b)Launcher启动

(八)Log抓取与分析方法

(九)总结及参考

概述:Loader  > Kernel > Native >  Framework > Application

细分:BootRom > Bootloader > Kernel > Init > Zygote > SystemServer > Launcher

Ø  Loader层主要包括Boot RomBoot Loader

Ø  Kernel层主要是Android内核层,启动0号和1号进程;

Ø  Native层主要是包括init进程以及其fork出来的用户空间的守护进程、HAL层、开机动画等;

Ø  Framework层主要是AMSPMSService的初始化;

Ø  Application层主要指SystemUILauncher的启动;

(二)BootLoader

Bootloader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。

调用流程:
crt0.S > kmain > arch_init > target_init > apps_init > aboot_init

详细步骤如下:

Ø  crt0.s中:

n  主要完成CPU初始化,禁用mmu,禁用cache,初始化异常向量表等操作,最后直接跳转到kmain中;

n  MTK平台:alps/vendor/mediatek/proprietary/bootable/bootloader/lk/arch/{paltform}/crt0.S

Ø  kmain方法中

n  MTK平台:alps/vendor/mediatek/proprietary/bootable/bootloader/lk/kernel/main.c

n  初始化线程系统 > 初始化mmu,设置异常向量基地址 > 初始化硬件时钟、主板等 > 初始化uart端口 > 内核堆栈初始化(用于kmalloc等函数的内存分配) > 初始化定时器 > 初始化内核定时器 > 判断是否定义ENABLE_NANDWRITE:如果是运行bootstrap2线程;如果不是则在timer_init之后执行bootstrap_nandwrite

Ø  Bootstrap2中执行arch_init > target_init > apps_init

n  arch_init:打印信息;

n  target_init

u  从共享内存中读写xbl提供的pmic信息;

u  

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值