; ; boot.s -- Kernel start location. Also defines multiboot header. ; Based on Bran's kernel development tutorial file start.asm ; MBOOT_PAGE_ALIGN equ 1<<0 ; Load kernel and modules on a page boundary MBOOT_MEM_INFO equ 1<<1 ; Provide your kernel with memory info MBOOT_HEADER_MAGIC equ 0x1BADB002 ; Multiboot Magic value ; NOTE: We do not use MBOOT_AOUT_KLUDGE. It means that GRUB does not ; pass us a symbol table. MBOOT_HEADER_FLAGS equ MBOOT_PAGE_ALIGN | MBOOT_MEM_INFO MBOOT_CHECKSUM equ -(MBOOT_HEADER_MAGIC + MBOOT_HEADER_FLAGS) [BITS 32] ; All instructions should be 32-bit. [GLOBAL mboot] ; Make 'mboot' accessible from C. [EXTERN code] ; Start of the '.text' section. [EXTERN bss] ; Start of the .bss section. [EXTERN end] ; End of the last loadable section. mboot: dd MBOOT_HEADER_MAGIC ; GRUB will search for this value on each ; 4-byte boundary in your kernel file dd MBOOT_HEADER_FLAGS ; How GRUB should load your file / settings dd MBOOT_CHECKSUM ; To ensure that the above values are correct dd mboot ; Location of this descriptor dd code ; Start of kernel '.text' (code) section. dd bss ; End of kernel '.data' section. dd end ; End of kernel. dd start ; Kernel entry point (initial EIP). [GLOBAL start] ; Kernel entry point. [EXTERN kernel_main] ; This is the entry point of our C code start: ; Load multiboot information: push ebx ; Execute the kernel: cli ; Disable interrupts. call kernel_main ; call our main() function. jmp $ ; Enter an infinite loop, to stop the processor ; executing whatever rubbish is in the memory ; after our kernel!