From fe9e7e9eae2fd70ac9c4ca16f4b90f3213d3e91e Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Fri, 31 Jul 2015 19:22:21 +0200 Subject: [PATCH] extend booting section --- _posts/2015-07-22-rust-os-boot.md | 12 ++++++++++++ images/qemu-ok.png | Bin 0 -> 5157 bytes 2 files changed, 12 insertions(+) create mode 100644 images/qemu-ok.png diff --git a/_posts/2015-07-22-rust-os-boot.md b/_posts/2015-07-22-rust-os-boot.md index 9cd62fa7..d9cbd528 100644 --- a/_posts/2015-07-22-rust-os-boot.md +++ b/_posts/2015-07-22-rust-os-boot.md @@ -161,10 +161,22 @@ grub-mkrescue -o os.iso isofiles ``` ## Booting +Now it's time to boot our OS. We will use [QEMU]: ``` qemu-system-x86_64 -hda os.iso ``` +![qemu output]({{ site.url }}/images/qemu-ok.png) + +Notice the green `OK` in the upper left corner. It works! Let's summarize what happens: + +1. the BIOS loads the bootloader (GRUB) from the virtual hard drive (the ISO) +2. the bootloader reads the kernel executable and finds the Multiboot header +3. it copies the `.boot` and `.text` section to memory (at addresses `0x100000` and `0x100020`) +4. it jumps to the entry point +5. our kernel writes the green `OK` and stops the CPU + +You can test it on real hardware, too. Just burn the ISO to a disk or USB stick and boot from it. [^fn-checksum_hack]: The formula from the table, `-(magic + architecture + header length)`, creates a negative value that doesn't fit into 32bit. By subtracting from `0x100000000` instead, we keep the value positive without changing its truncated value. Without the additional sign bit(s) the result fits into 32bit and the compiler is happy. diff --git a/images/qemu-ok.png b/images/qemu-ok.png new file mode 100644 index 0000000000000000000000000000000000000000..1a863b321315db0868edaee7a5c4138f0b2f6502 GIT binary patch literal 5157 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 literal 0 HcmV?d00001