(Android基础)Linux启动流程

  1. 按下开机键,系统开始供电。硬件电路产生一个确定的复位时序,并保证CPU是最后复位的(确保需要的磁盘,内存,寄存器已经复位)。
  2. CPU开始读取一个确定内存地址的指令,这个指令保存的程序被称为BootLoader,使用Bootloader来装载真正的用户程序(装载过程是一个策略问题,存在多种装载方式)。获知用户程序的位置与程序执行入口(读取并装载boot里面的用户程序)。
  3. 执行内核程序(CPU角度来说,除了BootLoader都是用户程序),初始化各种硬件,内存。网络接口,显示器,输入设备,,等。内核初始化完成,开始执行第一个用户进程(或称:应用程序),一般称为“Home”程序(Home程序的设计目的就是为了提供一个入口,用户可以通过这个入口启动其他的应用程序)。

对于Android系统来说:

  1. 按下开机键,系统开始供电,硬件电路产生一个确定的复位时序,并保证CPU是最后复位的(确保需要的磁盘,内存,寄存器已经复位)。
  2. CPU从ROM的指定位置中读取BootLoader,Bootloader会根据处理器上指定引脚的高低电平状态决定内核程序(uboot/fastboot)的物理接口读取位置,比如USB口,串口,SD卡,并口Flash(多数情况从这的0x00000000装载程序)。并获知用户程序的位置与程序执行入口。
  3. 从指定的物理接口中加载的程序,在Android中一般称为uboot或fastboot,其作用是初始化部分硬件设备,如网口,SDRAM,RS232等。并提供一些调试功能。uboot的运行先检测用户的按键操作,如双清,升级等。如果没有,则按照之前uboot编译时的约定从指定地址加载Linux内核。
  4. Linux内核被加载,开始内核的初始化操作并启动init进程,init进程根据init.rc文件启动相关的服务。其中init进程是第一个用户级别的进程。
您的一份奖励,就是我的一份激励