跳到主要内容

启动

UEFI/BIOS

  • 电源初始化后,CPU处于实模式,CPU直接从ROM中执行UEFI/BIOS,ROM会被映射到处理器的内存空间;然而,从ROM中取指令是非常慢的,所以UEFI/BIOS做的第一件事就是把自己从ROM复制到RAM中并解压,然后从RAM中执行。
  • BIOS在内存中夹在中断向量表和中断服务程序。
  • CPU执行int 0x19 中断,然后将MBR夹在到内存中的指定位置。
  • MBR会将自己复制到另外的内存地址,这样做是为了规划内存空间。

Bootloader:Grub

  • Stage 1:Stage1存放在MBR中,空间太小,代码无法识别文件系统,用于引导Stage1.5
  • Stage1.5:Stage1.5存放在MBR之后的32KB中,可以识别文件系统,从文件系统中引导Stage2
  • Stage2:加载Grub配置文件/boot/grub/grub.conf ,根据配置文件,加载内核和虚拟文件系统

Kernel

  • arch/x86/boot/header.S:_start:call main
  • arch/x86/boot/main.c:main:go_to_protected_mode
  • arch/x86/boot/pm.c:go_to_protected_mode:protected_mode_jump
  • arch/x86/boot/pmjump.S:protected_mode_jump:jmpl *%eax
  • THE LINUX/x86 BOOT PROTOCOL:eax=0x100000
  • arch/x86/boot/compressed/head_32.S/arch/x86/boot/compressed/head_64.S
  • ……
  • init/main.c:start_kernel >rest_init >kernel_init

Init:Systemd

  • init/main.c:start_kernel >rest_init >kernel_init >try_to_run_init_process >run_init_process >kernel_exceve