diff --git a/_posts/2015-07-22-rust-os-boot.md b/_posts/2015-07-22-rust-os-boot.md new file mode 100644 index 00000000..a9b3e07e --- /dev/null +++ b/_posts/2015-07-22-rust-os-boot.md @@ -0,0 +1,27 @@ +--- +layout: post +title: "[DRAFT] Rust OS Part 1: Booting" +related_posts: +--- + +Fortunately there is a bootloader standard: the [Multiboot +Specification][multiboot]. So our kernel just needs to indicate that it supports +Multiboot and every Multiboot-compliant bootloader can boot it. We will use the [GRUB 2] bootloader together with the [Multiboot 2] specification. So let's begin! + +To indicate our Multiboot 2 support to the bootloader, our kernel must contain a *Multiboot Header*, which has the following format: + +Field | Size in byte +------|----- +magic number | 4 + +Offset | Type | Field Name +-------|------|----------- +0 | u32 | magic +4 | u32 | architecture +8 | u32 | header_length +12 | u32 | checksum +16-XX | | tags + +[multiboot]: https://en.wikipedia.org/wiki/Multiboot_Specification +[GRUB 2]: http://wiki.osdev.org/GRUB_2 +[Multiboot 2]: http://nongnu.askapache.com/grub/phcoder/multiboot.pdf