Linux启动过程:

1、首先开机给系统供电,此时硬件电路会产生一个确定的复位时序,保证cpu是最后一个被复位的器件。为什么cpu要最后被复位呢?因为 如果cpu第一个被复位,则当cpu复位后开始运行时,其他硬件内部的寄存器状态可能还没有准备好,比如磁盘或者内存,那么就可能产生外围硬件初始化错误。

2、当正确完成复位后,cpu开始执行第一条指令,该指令所在的内存地址是固定的,这由cpu的制造者决定。不同的cpu可能会从不同的地址获取指令,但这个地址必须是固定的,这个固定地址所保存的程序往往被称为“引导程序(Bootloader)” 因为其作用是装载真正的用户程序。

不同的菜谱会提供不同的装载方式但是都要提供如下信息:

从哪里读取用户程序

用户程序的长度是多少

装载完用户程序后,应该跳转到哪里,既用户程序的执行入口在哪里?

不同硬件系统会采用不同的策略,但只要以上三个信息确定,用户程序就会被装载到确定的地址,并执行相同的操作

3、硬件装载好后,是执行内核程序(上步的用户程序) 内核程序初始化时执行的操作包括 初始化各种硬件,包括内存、网络接口,显示器、输入设备,然后就是建立各种内部数据结构,这些数据结构将用于多线程调度及内存的管理。当内核初始化完毕后,就开是运行具体的应用程序类,一般情况下,习惯于将第一个应用程序称为“Home”

像windows的Home就是桌面 Linux第一个运行的程序是Terminal (终端)(Home程序的实际目标就是提供一个入口用户可以通过该入口启动其他应用程序) 所以Linux的Terminal是一个Home。

这是linux的启动过程 下面分析下android的启动过程

三个概念:

ARM: 本身是一个公司名称,从技术角度来看 它又是一种微处理器内核的构架。

CPU:  是处理器内部的中央处理单元的缩写,CPU可以按照类型分为短指令集架构和长指令集架构 ARM属于短指令集架构的一种

对于ARM处理器 当复位完毕后,处理器首先执行其片上ROM中的一小块程序。这块ROM的大小一般只有几KB该段程序就是Bootloader程序。

这段程序执行时会根据处理器上一些特殊引脚的高低电平状态,选择从何种物理接口上装载用户程序,对于android而言。该程序中还不是

android程序,而是一个叫做uboot或者fastboot的程序,其作用是初始化硬件设备,比如网口 等 并提供一些调试功能,比如向NAND FLASH

中写入新的数据这可用于开发过程中的内核烧写 升级等

当uboot被装载后便开始运行,他一般会先检测用户是否按下类某些特别按键,这些特别按键是uboot在编译是预先约定好的,用于进入调试模式

如果用户没有按这些特别的按键则 uboot会从NAND Flash中装载Linux内核,装载的地址是在编译uboot时约定好的

Linux内核被装载后,就开始进行内核初始化的过程

以上过程中,init.rc文件在android手机中的系统根目录下,可以使用adb pull命令提取出该文件: adb pull /init.rc ~/Desktop

init.rc的内容格式类似一种脚本,但是他却不是标准的linux脚本 而是仅用于启动的脚本 。

从Linux启动过程到android启动过程的更多相关文章

  1. Android系统启动过程-uBoot+Kernel+Android

    摘要:本文是参考大量网上资源在结合自己查看源代码总结出来的,让自己同时也让大家加深对Android系统启动过程有一个更加深入的了解!再次强调,本文的大多数功劳应归功于那些原创者们,同时一些必要的参考链 ...

  2. android 启动过程

    android系统启动的时候首先会启动Linux的基础进程,加载Linux kernel启动初始化(init)进程. 接着,回启动Linux deamon(守护进程)会启动以下的内容: ①启动USBd ...

  3. Android 启动过程简析

    首先我们先来看android构架图: android系统是构建在linux系统上面的. 所以android设备启动经历3个过程. Boot Loader,Linux Kernel & Andr ...

  4. Android 核心分析 之八Android 启动过程详解

    Android 启动过程详解 Android从Linux系统启动有4个步骤: (1) init进程启动 (2) Native服务启动 (3) System Server,Android服务启动 (4) ...

  5. Android启动过程以及各个镜像的关系

    Android启动过程 Android在启动的时候,会由UBOOT传入一个init参数,这个init参数指定了开机的时候第一个运行的程序,默认就是init程序,这个程序在ramdisk.img中.可以 ...

  6. Android(java)学习笔记162:Android启动过程(转载)

    转载路径为: http://blog.jobbole.com/67931/ 1. 关于Android启动过程的问题: 当按下Android设备电源键时究竟发生了什么? Android的启动过程是怎么样 ...

  7. Android启动过程深入解析

    本文由 伯乐在线 - 云海之巅 翻译.未经许可,禁止转载!英文出处:kpbird.欢迎加入翻译小组. 当按下Android设备电源键时究竟发生了什么? Android的启动过程是怎么样的? 什么是Li ...

  8. Android启动过程深入解析【转】

    转自:http://www.open-open.com/lib/view/open1403250347934.html 当按下Android设备电源键时究竟发生了什么? Android的启动过程是怎么 ...

  9. Android(java)学习笔记105:Android启动过程(转载)

    转载路径为: http://blog.jobbole.com/67931/ 1. 关于Android启动过程的问题: 当按下Android设备电源键时究竟发生了什么? Android的启动过程是怎么样 ...

随机推荐

  1. Python小代码_1_九九乘法表

    Python小代码_1_九九乘法表 max_num = 9 row = 1 while row <= max_num: col = 1 while col <= row: print(st ...

  2. 微信小程序--试水

    应公司需求,接手小程序,在此之前我是一点也没有接触过,对此,拿过小程序文档和官方案例就一顿恶补,在此期间也看过一些小程序建立模型的视频,终于对小程序知晓一二,拿过项目开始研究.好了废话不多说,总结一下 ...

  3. C++重载输入流复习

    C++重载输入流 #include <bits/stdc++.h> using namespace std; struct Point { int x, y; Point(int xx, ...

  4. ACM Wooden Stricks

    有一堆n根木棍.每根棍子的长度和重量是预先知道的. 这些棒子将被木工机器逐一加工..它需要一些时间,称为安装时间,用于机器准备加工棒.设置时间与机器中的清洁操作和更换工具和形状相关联.木工机械的安装时 ...

  5. The type org.apache.commons.lang.exception.NestableRuntimeException cannot be resolved.

    最近自己练手写项目时,遇到了这个错,写个文章记录下, The type org.apache.commons.lang.exception.NestableRuntimeException canno ...

  6. Docker学习笔记4: Docker-Compose—简化复杂容器应用的利器

    本文转载自http://www.tuicool.com/articles/AnIVJn. 因Python语言,个人也没学过,不是太熟悉,这篇文章的代码格式排版不准确爆了很多错,让我走了好多坑,不过还是 ...

  7. C算法实现:将字符串中的数字返回为整型数

    今天看linux内核驱动的代码,发现一个算法写得挺简单,也有意思. 分享一下我的测试代码: #include <stdio.h> typedef int U32 ; U32 String2 ...

  8. Android图表库MPAndroidChart(八)——饼状图的扩展:折线饼状图

    Android图表库MPAndroidChart(八)--饼状图的扩展:折线饼状图 我们接着上文,饼状图的扩展,增加折现的说明,来看下我们要实现的效果 因为之前对MPAndroidChart的熟悉,所 ...

  9. 给定一个实数数组,按序排列(从小到大),从数组从找出若干个数,使得这若干个数的和与M最为接近,描述一个算法,并给出算法的复杂度。

    有N个正实数(注意是实数,大小升序排列) x1 , x2 ... xN,另有一个实数M. 需要选出若干个x,使这几个x的和与 M 最接近. 请描述实现算法,并指出算法复杂度. #define M 8 ...

  10. Spark技术内幕:Storage 模块整体架构

    Storage模块负责了Spark计算过程中所有的存储,包括基于Disk的和基于Memory的.用户在实际编程中,面对的是RDD,可以将RDD的数据通过调用org.apache.spark.rdd.R ...