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. IP地址段遍历

    #region 搜索ftp服务器地址 /// <summary> /// 搜索ftp服务器 /// </summary> public void SearchFtpServer ...

  2. substr函数用法详解

    substr(string, start<,length>):从string的start位置开始提取字符串 length:要提取字符串的长度,若length为以下任意条件之一时,返回sta ...

  3. Node.js 系统

    稳定性: 4 - API 冻结 提供一些基本的操作系统相关函数. 使用 require('os') 访问这个模块. os.tmpdir() 返回操作系统的默认临时文件夹 os.endianness() ...

  4. ZooKeeper之(五)集群管理

    在一台机器上运营一个ZooKeeper实例,称之为单机(Standalone)模式.单机模式有个致命的缺陷,一旦唯一的实例挂了,依赖ZooKeeper的应用全得完蛋. 实际应用当中,一般都是采用集群模 ...

  5. Excel下拉框多列显示,如何只显示一列

    小编最近接手一个项目,之于需要导数据,但是我们需要提前把表头什么的设置好,更方便其他小伙伴们帮助我们导入数据,小伙伴们都知道,在excel中设置下拉菜单很简单,直接用数据有效性-序列就可以实现,今天小 ...

  6. shiro自定义Realm

    1.1 自定义Realm 上边的程序使用的是shiro自带的IniRealm,IniRealm从ini配置文件中读取用户的信息,大部分情况下需要从系统的数据库中读取用户信息,所以需要自定义realm. ...

  7. FORM内置系统变量

    常用 和输入焦点有关: SYSTEM.CURSOR_ITEM:返回系统当前正在操作的项名. SYSTEM.CURSOR_RECORD:返回系统当前正在操作的记录行号. SYSTEM.CURSOR_BL ...

  8. 源码篇——AsyncTask机制

    AsyncTask new AsyncTask<String,String,String>(){ // 运行在主线程中,做预备工作 onPreExecute(){ } // 运行在子线程中 ...

  9. Java基本语法-----java运算符的优先级与结合性

    这是本人以前的上学期间java 运算符这块知识的总结的,截图存到了word里,大家将就看下吧(不会用Markdown的表格 不然就在写一遍了 T T). [正在看本人博客的这位童鞋,我看你气度不凡,谈 ...

  10. Android加速度传感器

    Android加速度传感器 效果图 手机平放桌面的两张截屏,数据一直在刷新 源码 下载地址(Android Studio工程):http://download.csdn.net/detail/q487 ...