1. arch/x86/boot/header.S , kernel setup 从 _start开始。 设置 stack, bss, 最后跳转到 arch/x86/boot/main.c。
2. 在main函数中,把kernel setup header 拷贝到 struct setup_header, 之后初console_init, init_heap, validate_cpu, detect_memory(e820), keyboard_init, set_video, 最后go_to_protected_mode。
3. go_to_protected_mode 中打开A20, setup_idt, setup_gdt, 最终跳转到 arch/x86/boot/compressed/head_64.S 中的startup_32函数。
4. startup_32中检查是否需要重新加载segments, 之后计算编译地址和实际