Android 8.0 开机流程 (一) Linux内核启动过程

本文参考了时光如刀的博客。https://blog.youkuaiyun.com/marshal_zsx/article/details/80225854

1、概述

    本文从Linux内核启动开始分析,uboot部分只粗略讲解下。同时基于Mstar 平台系统。Android 8.0 Linux4.9.9。

    Uboot:上电后通过汇编指令加载uboot引导程序,uboot将内核镜像从ROM 拷贝RAM后并加载。

   Linux 启动过程中生成了三个重要的进程:idle进程(pid=0)、init进程(pid=1),kthreadd进程(pid = 2)。这三个进程是Linux内核的基       础,后面的所有进线程都是基于这个三个进程创建的。

  idle进程是Linux系统第一个进程,也是init进程,kthreadd进程的父进程。

  init进程是用户空间的第一个进程,也是用户空间所有进程的父进程。

  kthreadd进程是内核一个守护进程,也是内核所有线程的父进程。

2、idle进程

  idle进程的启动是有汇编编写的。文件是Kernel\arch\arm64\kernel\head.S 

#ifdef CONFIG_RANDOMIZE_BASE
    tst    x23, ~(MIN_KIMG_ALIGN - 1)    // already running randomized?
    b.ne    0f
    mov    x0, x21                // pass FDT address in x0
    mov    x1, x23                // pass modulo offset in x1
    bl    kaslr_early_init        // parse FDT for KASLR options
    cbz    x0, 0f                // KASLR disabled? just proceed
    orr    x23, x23, x0            // record KASLR offset
    ldp    x29, x30, [sp], #16        // we must enable KASLR, return
    ret                    // to __primary_switch()
0:
#endif

    b    start_kernel     //b 跳转   start_ke
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值