Android启动和Liunx启动流程

1 Bootloader

对于一般的ARM处理器,CPU上电或复位执行第一条指令所在地址,即第一段程序Bootloader的开始地址,Bootloader一般存于Nor-flash(XIP),支持芯片内执行。

Bootloader的功能可总结为:1)初始化CPU时钟,内存,串口等。2)设置Linux启动参数。3)加载Linux内核镜像。Android源码位于根目录下的/bootable文件夹。

系统正常启动,运行Bootloader,初始化芯片,根据设置的启动参数cmdline,加载Linux内核镜像,将控制权交给内核。

系统在Bootloader模式下(非正常启动模式),可使用fastboot, mmcboot等工具烧写内核和文件系统,顺便提一下,Android手机分区一般分为内核区boot.img,系统区system.img,用户数据区userdata.img,数据恢复区recovery.img等。

2 Linux内核镜像

内核镜像被加载到内存,首先进行自解压,zImage, bzImage或uImage的头部都内嵌有解压缩程序,最终将内核解压到内存的指定位置,开始运行内核。

3 启动内核

源码位于/kernel/init/main.c,线索可归纳为:启动内核start_kernel() => 初始化Linux各大模块 + rest_init() => 开启内核线程kthreadd和kernel_init() => 初始化设备驱动程序do_basic_setup() + init_post() => 开启第一个用户进程init。

3.1 start_kernel()

源码位于/kernel/init/main.c的start_kernel()函数,完成初始化Linux系统的进程管理,内存管理,文件系统等工作,可以说个个都是重量级的工作。

这里有必要解释下内核选项,因为Linux各个子系统的初始化都建立在内核选项的解析之后。

parse_early_param();

parse_args("Booting kernel", static_command_line, __start___param,

__stop___param - __start___param, &unknown_bootoption);

1) 内核选项的注册

通过__early_parm(str, fn)或__setup(str, fn)宏来注册。两者都调用__setup_param宏实现,它将注册的内核选项str所关联的函数fn存放到.init.setup节。

2) 内核选项的解析

两次注册对应两次解析,即parse_early_param()和parse_param(),解析时,会在__setup_start和 __setup_end之间查找内核选项,当识别有内核选项时,即会调用相应的处理函数。内核解析完后,各个子系统的初始化就可通过 kernel_init()=>do_basic_setup()=>do_initcalls()来完成。

3.2 reset_init()

开启内核线程kthreadd和kernel_init,kthreadd用来运行kthread_create_list全局链表中的kthread,然后创建idle线程来占用掉cpu空闲的时间片。

内核线程又叫守护进程,关于内核线程和Linux普通进程的区别,归纳为以下三点:

* 内核线程执行的是内核中的函数,而普通进程只有通过系统调用才能执行内核中的函数。

* 内核线程只运行在内核态,而普通进程既可以运行在用户态,也可以运行在内核态。

* 因为内核线程指只运行在内核态,因此,它只能使用大于PAGE_OFFSET(3G)的地址空间。另一方面,不管在用户态还是内核态,普通进程可以使用4GB的地址空间。

3.3 kernel_init()

此时与体系相关的部分已经初始化完成,do_basic_setup()开始初始化设备,完成外设及驱动程序(直接编译进内核的模块)的加载和初始化。

3.4 init_post()

开启init用户进程,所谓Android的启动流程从这里才刚刚开始。

---来自一加社区手机客户端

手机开机有linux的企鹅,为什么我的一加x,开机的时候有个小企鹅在那里坐着。...相关推荐

  1. linux 小企鹅输入法 方块乱码

    小企鹅输入法安装 个人认为小企鹅输入法还是很不错的,最近重新安装了小企鹅输入法.以下是安装步骤: 1.首先是下载小企鹅输入法安装包,安装过程就不在这里详述.本人是通过apt-get install f ...

  2. 手机开机linux企鹅,修改linux内核的开机图片(小企鹅)

    windows中把一张xx.jpg的图片转换成xx.bmp的图片方法: linux中生成ppm图片(ppm图片应该是其他格式的图片解析成数据序列的文件) [方法1] 转换方法如下: bmp图片使用bm ...

  3. linux内核开机显示企鹅logo,批改linux内核kernel开机logo(小企鹅)

    修改linux内核kernel开机logo(小企鹅) 修改linux内核kernel的开机图片(原为小企鹅图片). 转载请注明出处:http://blog.csdn.net/wang_zheng_ka ...

  4. Linux内核启动去掉企鹅,修改linux内核kernel开机logo(小企鹅)

    修改linux内核kernel的开机图片(原为小企鹅图片). 转载请注明出处:http://blog.csdn.net/wang_zheng_kai 导航制导与控制实验室 2014年12月10日 本文 ...

  5. Linux下安装中文输入法--小企鹅输入法

    Linux 下安装中文输入法-- 小企鹅输入法 作者: zccst Linux 系统: CentOS 5.3 刚刚装好的 CentOS 5.3 ,不要说有中文输入法,甚至连中文字体在浏览器里都无法显示 ...

  6. linux修改开机启动,Linux修改开机启动logo

    默认开机LOGO会在液晶屏的左上脚显示一只小企鹅,分辨率为80*80,具体在kernel/drivers/video/logo下会有logo_linux_clut224.ppm这幅图像,程序会根据这幅 ...

  7. (一)专题介绍:移动端安卓手机改造成linux服务器linux服务器中安装软件、部署前后端分离项目实战

    快捷目录 前言 一.涉及到的相关技术简介 二.具体实现过程及踩坑杂谈 1.安卓手机改造成linux系统实现方案 2.改造后的手机Linux中软件的安装 3.手机Linux中安装MySQL5.7踩坑实录 ...

  8. 安卓如何安装kali linux系统版本,安卓安装kali linux渗透系统 手机安装kali linux

    安卓安装kali linux渗透系统 手机安装kali linux 现在大家手上几乎都有安卓的设备了.要是渗透扫描不开kali虚拟机,直接ssh到手机上去扫描,那是一件多么美妙的事情. 首先看了下官网 ...

  9. 手机密钥连接linux主机

    android connectbot 公钥使用方法 2012-08-23 02:19:40|  分类: ASP.NET |字号 订阅 http://raynix.info/archives/1346 ...

  10. 看漫画,学Linux内核!看完明白小企鹅们在干啥了吧?

    今天,为大家解读一幅来自 TurnOff.us 的漫画 "InSide The Linux Kernel".TurnOff.us 是一个极客漫画网站,作者Daniel Stori ...

最新文章

  1. 新浪微博开放平台API中page参数的使用方法
  2. Win7系统安装MySQL5.5.21图解教程
  3. [蓝桥杯2015初赛]生命之树-求树的最大子树权值和
  4. 纯手写的css3正方体旋转效果
  5. 真正的代码宝库:Google Code Search
  6. 教育部认可公众号博主是自由职业,网友:公号被封算失业吗?
  7. php调用python导出excel_如何使用Django导出Excel代码问题
  8. 常用标准库_Python入门(五):常用标准库sys和os
  9. 关于ctf竞赛训练 积累的资料
  10. 《安富莱嵌入式周报》第228期:2021.08.30--2021.09.05
  11. 【Blender】UV贴图相关学习
  12. 区块链将成为互联网基础协议,类似于TCP/IP、HTTP
  13. preg_match用法
  14. CODY Contest 2020 MATLAB Onramp Practice 全15题
  15. 消防水带箱市场现状及未来发展趋势
  16. DIV+CSS网页设计常用布局代码
  17. 父进程退出后,子进程自动消亡
  18. C语言学习之认识exit()函数
  19. 安装jieba库的解决办法及简单使用
  20. 机电照明工程软件测试大纲,2019最新大纲 | 公路水运工程试验检测考试大纲《交通工程》...

热门文章

  1. CSU--1721: 皇家火枪手
  2. element ui表格打印_封装element-ui表格,我是这样做的
  3. 天书奇谈手游怎么用电脑玩 天书奇谈手游安卓模拟器教程
  4. 学习Windows 7:使用Windows Media Player管理音乐
  5. 如何搭建GFS分布式文件系统
  6. Flume中Memory Channel参数说明
  7. Heap memory和Stack memory的区别
  8. 返回一个二维循环数组中最大子矩阵的和
  9. 华硕ASUS PRIME Z790-P D4主板单烤FPU蓝屏
  10. 红外遥控38KHz载波,收发调制解码工作原理