stage2/stage2.c:cmain()
`-- run_menu()
`-- run_script();
|-- builtin = find_command(heap);
|-- kernel_func(); // "kernel" komutu için builtin->func()
| `-- load_image(); // boot.c içinde BOOTSEC_SIGNATURE'ı ara
| /* 0x100000'dan başlayan bellek (bvmlinux, bbootsect, bsetup)
| * veya (vmlinux, bootsect, setup) sırasında onlar tarafından
* doldurulur */
|-- initrd_func(); // "initrd" komutu için
| `-- load_initrd();
`-- boot_func(); // örtük "boot" komutu için
`-- linux_boot(); // stage2/asm.S içinde tanımlı
or big_linux_boot(); // grub/asmstub.c! içinde değil
// stage2/asm.S içinde
linux_boot:
/* çekirdeği kopyala */
sistem kodunu 0x100000 adresinden 0x10000 adresine
taşı (linux_text_len bytes);
big_linux_boot:
/* gerçek kip kısmını kopyala */
EBX = linux_data_real_addr;
kurulum kodunu linux_data_tmp_addr (0x100000+text_len) adresinden
linux_data_real_addr (0x9100 bytes) adresine taşı;
/* %ebx değerini bölüt adresi olarak değiştir*/
linux_setup_seg = (EBX >> 4) + 0x20;
/* XXX çağıran işlevler için güvenli alandaki yeni yığıt göstericisi
ESP = 0x4000;
stop_floppy();
/* linux önyüklemesi için son ayarlama */
prot_to_real();
cli;
SS:ESP = BX:9000;
DS = ES = FS = GS = BX;
/* başlangıca sıçra, örn. ljmp linux_setup_seg:0
* Dikkat ederseniz linux_setup_seg BX olarak değiştirildi. */
.byte 0xea
.word 0
linux_setup_seg:
.word 0