From 5e96335c23acb50aed2874e80afd11a917e99760 Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Thu, 8 Feb 2018 22:59:34 +0100 Subject: [PATCH] Add instructions for running in QEMU, VirtualBox, and on real hardware --- .../posts/02-minimal-rust-kernel/index.md | 28 +++++++++++++++--- .../posts/02-minimal-rust-kernel/qemu.png | Bin 0 -> 7656 bytes 2 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 blog/content/second-edition/posts/02-minimal-rust-kernel/qemu.png diff --git a/blog/content/second-edition/posts/02-minimal-rust-kernel/index.md b/blog/content/second-edition/posts/02-minimal-rust-kernel/index.md index a30373ce..93a63632 100644 --- a/blog/content/second-edition/posts/02-minimal-rust-kernel/index.md +++ b/blog/content/second-edition/posts/02-minimal-rust-kernel/index.md @@ -186,7 +186,7 @@ Compiling for our new target will use Linux conventions. I'm not quite sure why, #![no_main] // disable all Rust-level entry points #[lang = "panic_fmt"] // define a function that should be called on panic -#[no_mangle] // TODO required? +#[no_mangle] pub extern fn rust_begin_panic(_msg: core::fmt::Arguments, _file: &'static str, _line: u32, _column: u32) -> ! { @@ -314,10 +314,30 @@ To make things easy, we created a tool named `bootimage` that automatically down You should now see a file named `bootimage.bin` in your crate root directory. This file is a bootable disk image, so can boot it in a virtual machine or copy it to an USB drive to boot it on real hardware. (Note that this is not a CD image, which have a different format, so burning it to a CD doesn't work). ## Booting it! +We can now boot our kernel in a virtual machine. To boot it in [QEMU], execute the following command: -- qemu -- bochs? virtualbox? -- makefile? cargo-make? +[QEMU]: https://www.qemu.org/ + +``` +> qemu-system-x86_64 -drive format=raw,file=bootimage.bin +warning: TCG doesn't support requested feature: CPUID.01H:ECX.vmx [bit 5] +``` + +![QEMU showing "Hello World!"](qemu.png) + +You can also [convert the raw disk image to a VDI] to load it in [VirtualBox]. + +[convert the raw disk image to a VDI]: https://blog.sleeplessbeastie.eu/2012/04/29/virtualbox-convert-raw-image-to-vdi-and-otherwise/ +[VirtualBox]: https://www.virtualbox.org/ + +It is also possible to write it to an USB stick and boot it on a real machine: + +``` +> dd if=bootimage.bin of=/dev/sdX && sync +``` + +Where `sdX` is the device name of your USB stick. It overwrites everything on that device, so be careful to choose the correct device name. ## What's next? In the next post, we will explore the VGA text buffer in more detail and write a safe interface for it. We will also add support for the `println` macro. +TODO diff --git a/blog/content/second-edition/posts/02-minimal-rust-kernel/qemu.png b/blog/content/second-edition/posts/02-minimal-rust-kernel/qemu.png new file mode 100644 index 0000000000000000000000000000000000000000..909b531e4e42582efff986f612e828f6bcf3b36d GIT binary patch literal 7656 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