Linux启动全过程

  1. BIOS启动

    • 上电自检,对设备的硬件进行一系列测试。
    • 初始化硬件设备。
    • 搜索一个操作系统来启动。
    • 找到一个有效的设备,就把第一个扇区的内容拷贝到RAM中,从物理地址0x00007c00开始的位置,跳转到这个地址上,开始执行刚才装载的代码。
  2. 从磁盘启动linux

    • 引导装入程序叫做linux loader(LILO),调用BIOS过程显示loading信息。
    • 调用BIOS过程从磁盘装入内核映像的初始部分,即将内核映像的第一个512字节从地址0x00090000开始装入RAM,将setup代码从0x00092000装入RAM
    • 调用BIOS过程从磁盘装载其余的内核映像。
    • 调转到setup代码
  3. 执行setup函数

    • 初始化物理内存分布表
    • 初始化各种硬件设备
    • 建立IDT和GDT
    • 重新编写可编程中断控制器
    • 跳转到startup_32 汇编函数
  4. startup_32函数

    • 初始化段寄存器和一个临时堆栈
    • 解压内核映像
    • 初始化内核页表
    • 为进程0创建内核态堆栈,把从BIOS获得的系统参数和从做系统的参数放入第一个页框中。
    • 填充GDTr和IDTr寄存器。
    • 跳转到start_kernel
  5. start_kernel函数

    • 各种初始化(调度程序,内存管理,伙伴系统,软中断,系统日期和时间,slab分配器,CPU时钟速度)
    • 为进程1创建内核线程。