看了深入理解linux内核一书的最后对linux启动流程的介绍,下面就把我能理解的写一下吧:

  • bios(硬件加电自检POST,寻找第一个启动设备)
  • the boot loader(可以从硬盘启动也可以从软盘,这一步要加载内核到内存)
    • 从硬盘启动
  • setup函数(检查硬件设备并为内核线程执行设定环境)
  • setup32函数(有两个setup32函数)
    • 第一个setup32(解压内核屏幕能看到解压完成,跳到物理地址0x00100000运行第二个setup32函数)
    • 第二个setup32(为进程0设定执行环境)
  • start_kernel函数(内核的初始化,启动大部分内核组件,有进程1运行/sbin/init来启动相应的启动程序)