从Linux启动过程到android启动过程
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启动过程的更多相关文章
- Android系统启动过程-uBoot+Kernel+Android
摘要:本文是参考大量网上资源在结合自己查看源代码总结出来的,让自己同时也让大家加深对Android系统启动过程有一个更加深入的了解!再次强调,本文的大多数功劳应归功于那些原创者们,同时一些必要的参考链 ...
- android 启动过程
android系统启动的时候首先会启动Linux的基础进程,加载Linux kernel启动初始化(init)进程. 接着,回启动Linux deamon(守护进程)会启动以下的内容: ①启动USBd ...
- Android 启动过程简析
首先我们先来看android构架图: android系统是构建在linux系统上面的. 所以android设备启动经历3个过程. Boot Loader,Linux Kernel & Andr ...
- Android 核心分析 之八Android 启动过程详解
Android 启动过程详解 Android从Linux系统启动有4个步骤: (1) init进程启动 (2) Native服务启动 (3) System Server,Android服务启动 (4) ...
- Android启动过程以及各个镜像的关系
Android启动过程 Android在启动的时候,会由UBOOT传入一个init参数,这个init参数指定了开机的时候第一个运行的程序,默认就是init程序,这个程序在ramdisk.img中.可以 ...
- Android(java)学习笔记162:Android启动过程(转载)
转载路径为: http://blog.jobbole.com/67931/ 1. 关于Android启动过程的问题: 当按下Android设备电源键时究竟发生了什么? Android的启动过程是怎么样 ...
- Android启动过程深入解析
本文由 伯乐在线 - 云海之巅 翻译.未经许可,禁止转载!英文出处:kpbird.欢迎加入翻译小组. 当按下Android设备电源键时究竟发生了什么? Android的启动过程是怎么样的? 什么是Li ...
- Android启动过程深入解析【转】
转自:http://www.open-open.com/lib/view/open1403250347934.html 当按下Android设备电源键时究竟发生了什么? Android的启动过程是怎么 ...
- Android(java)学习笔记105:Android启动过程(转载)
转载路径为: http://blog.jobbole.com/67931/ 1. 关于Android启动过程的问题: 当按下Android设备电源键时究竟发生了什么? Android的启动过程是怎么样 ...
随机推荐
- Java锁Synchronized对象锁和类锁区别
java的内置锁:每个java对象都可以用做一个实现同步的锁,这些锁成为内置锁.线程进入同步代码块或方法的时候会自动获得该锁,在退出同步代码块或方法时会释放该锁.获得内置锁的唯一途径就是进入这个锁的保 ...
- Spring Boot Cache Redis缓存
1.集成MyBatis 1.1.引入maven依赖 1.2.生成Mapper 具体可以看MyBatis Generator官网 http://www.mybatis.org/generator/run ...
- 数据结构Java版之交换算法(一)
交换的本质是拷贝,其中拷贝包括两种方式.值拷贝和指针拷贝,在java中没有指针,为此,我们可以理解为地址拷贝,在我看来,指针就是地址. 1.传值方式示例: 由上述示例可得,传值,不能起到交换的作用,原 ...
- Stall Reservations
Oh those picky N (1 <= N <= 50,000) cows! They are so picky that each one will only be milked ...
- 关于在arm裸板编程时使用printf问题的解决方法
在ARM裸板驱动编程中,是不允许程序直接调用C库程序的.为什么呢?因为此时kernel还没有被加载,所以在封装在kernel层的C库的API是用不了的,那怎么办? 在开发过程中,printf的功能我不 ...
- Python 3 智能发音
真是十分神奇.. import win32com.client import time s = win32com.client.Dispatch("SAPI.SpVoice") s ...
- 详解EBS接口开发之库存事务处理-物料批次导入
库存事务处理-物料批次导入 --系统批次表 SELECT * FROM MTL_LOT_NUMBERS T; --API创建批次 inv_lot_api_pub.create_inv_lot(x_re ...
- 剑指Offer——好未来视频面知识点储备+面后总结
剑指Offer--好未来视频面知识点储备+面后总结 情景介绍 时间:2016.10.12 13:00- 地点:宿舍 事件:好未来视频面 知识点储备 数据结构 单链表反转 public class Li ...
- java虚拟机参数设置 jvm参数设置
java进程命令行使用方式如下: java [-options] class [args...] -options 表示虚拟机的启动参数, class为带有main()函数的java类的全名称 arg ...
- JDBC的java驱动安装
首先登陆mysql.com官方网站,download-->选中下面的community–>mysql connentor-->然后选中下面与平台无关的zip包,一般是第二个,完成下载 ...