Anroid内核——启动篇

Linux启动过程

  1. 开机并执行bootloader程序(引导程序);
  2. 操作系统内核初始化(执行内核程序,初始化各种硬件,建立各种内部数据结构);
  3. 执行第一个应用程序——Home程序——一般是Terminal(启动其他应用程序的入口)。

ARM处理器上的linux启动过程~Android系统运行的底层处理器

复位 -> 执行bootloader程序 -> 装载uboot/fastboot程序 -> 开始运行:

  • 用户按下特别按键 —— 进入调试模式
  • 用户没有按下特别按键 —— uboot(fastboot)从NAND Flash中装载Linux内核。
    -> 内核初始化:
  1. start() ./arch/XXX/boot/head.S 进行一些CPU寄存器的配置
  2. startup_32() ./arch/xxx/boot/compress/head.S 配置堆栈,对BSS段进行清空
  3. decompress_kernel() ./archXXX/boot/compress/misc.c 解压内核
  4. startup_32() ./arch/XXX/kernel/head.S CPU页表配置(主要用于虚拟内存,并检测该CPU是否有浮点处理单元(FPU)支持,此时该进程为系统进程——0号进程)
  5. start_kernel() ./init/main.c 内核内部数据初始化,配置中断向量表,挂载ramdisk,调用kernel_thread()方法
  6. kernel_thread() ./arch/XXX/kernel/process.c 根据ramdisk/init.rc,启动不同的应用程序
  7. cpu_idle() ./init/main.c 内核可以按照进程的优先级进行调度

你可能感兴趣的:(Anroid内核——启动篇)