From 54ab56aec5fab80221e4e7729fb9bc438789b77b Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Sun, 25 Jun 2017 21:00:08 +0200 Subject: [PATCH] Move links down to avoid splitting list items --- blog/content/posts/04-printing-to-screen/index.md | 13 +++++-------- blog/content/posts/07-remap-the-kernel/index.md | 11 ++++------- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/blog/content/posts/04-printing-to-screen/index.md b/blog/content/posts/04-printing-to-screen/index.md index 2c6e74eb..ccf5d4d8 100644 --- a/blog/content/posts/04-printing-to-screen/index.md +++ b/blog/content/posts/04-printing-to-screen/index.md @@ -648,20 +648,17 @@ Now that you know the very basics of OS development in Rust, you should also che - [Rust Bare-Bones Kernel]: A basic kernel with roughly the same functionality as ours. Writes output to the serial port instead of the VGA buffer and maps the kernel to the [higher half] \(instead of our identity mapping). _Note_: You need to [cross compile binutils] to build it (or you create some symbolic links[^fn-symlink] if you're on x86_64). -[Rust Bare-Bones Kernel]: https://github.com/thepowersgang/rust-barebones-kernel -[higher half]: http://wiki.osdev.org/Higher_Half_Kernel -[cross compile binutils]: ./extra/cross-compile-binutils.md - - [RustOS]: More advanced kernel that supports allocation, keyboard inputs, and threads. It also has a scheduler and a basic network driver. -[RustOS]: https://github.com/RustOS-Fork-Holding-Ground/RustOS - - ["Tifflin" Experimental Kernel]: Big kernel project by thepowersgang, that is actively developed and has over 650 commits. It has a separate userspace and supports multiple file systems, even a GUI is included. Needs a cross compiler. -["Tifflin" Experimental Kernel]:https://github.com/thepowersgang/rust_os - - [Redox]: Probably the most complete Rust OS today. It has an active community and over 1000 Github stars. File systems, network, an audio player, a picture viewer, and much more. Just take a look at the [screenshots][redox screenshots]. +[Rust Bare-Bones Kernel]: https://github.com/thepowersgang/rust-barebones-kernel +[higher half]: http://wiki.osdev.org/Higher_Half_Kernel +[cross compile binutils]: ./extra/cross-compile-binutils.md +[RustOS]: https://github.com/RustOS-Fork-Holding-Ground/RustOS +["Tifflin" Experimental Kernel]:https://github.com/thepowersgang/rust_os [Redox]: https://github.com/redox-os/redox [redox screenshots]: https://github.com/redox-os/redox#what-it-looks-like diff --git a/blog/content/posts/07-remap-the-kernel/index.md b/blog/content/posts/07-remap-the-kernel/index.md index 2800a76c..3d2f35e2 100644 --- a/blog/content/posts/07-remap-the-kernel/index.md +++ b/blog/content/posts/07-remap-the-kernel/index.md @@ -818,21 +818,18 @@ These lines are the important ones. We can read many useful information from the - `v=0e`: An exception with number `0xe` occurred, which is a page fault according to the [OSDev Wiki][osdev exception overview]. -[osdev exception overview]: http://wiki.osdev.org/Exceptions -[page fault]: http://wiki.osdev.org/Exceptions#Page_Fault - - `e=0002`: The CPU set an [error code][page fault error code], which tells us why the exception occurred. The `0x2` bit tells us that it was caused by a write operation. And since the `0x1` bit is not set, the target page was not present. -[page fault error code]: http://wiki.osdev.org/Exceptions#Error_code - - `IP=0008:000000000010ab97` or `pc=000000000010ab97`: The program counter register tells us that the exception occurred when the CPU tried to execute the instruction at `0x10ab97`. We can disassemble this address to see the corresponding function. The `0008:` prefix in `IP` indicates the code [GDT segment]. -[GDT segment]: ./posts/02-entering-longmode/index.md#loading-the-gdt - - `SP=0010:00000000001182d0`: The stack pointer was `0x1182d0` (the `0010:` prefix indicates the data [GDT segment]). This tells us if it the stack overflowed. - `CR2=00000000000b8f00`: Finally the most useful register. It tells us which virtual address caused the page fault. In our case it's `0xb8f00`, which is part of the [VGA text buffer]. +[osdev exception overview]: http://wiki.osdev.org/Exceptions +[page fault]: http://wiki.osdev.org/Exceptions#Page_Fault +[page fault error code]: http://wiki.osdev.org/Exceptions#Error_code +[GDT segment]: ./posts/02-entering-longmode/index.md#loading-the-gdt [VGA text buffer]: ./posts/04-printing-to-screen/index.md#the-vga-text-buffer So let's find out which function caused the exception: