mirror of
https://github.com/phil-opp/blog_os.git
synced 2025-12-16 14:27:49 +00:00
Rename code release tags for first edition
This commit is contained in:
20
README.md
20
README.md
@@ -49,29 +49,29 @@ The current version of the blog is already the second edition. The first edition
|
|||||||
|
|
||||||
### Bare Bones
|
### Bare Bones
|
||||||
- [A Minimal x86 Kernel](https://os.phil-opp.com/multiboot-kernel.html)
|
- [A Minimal x86 Kernel](https://os.phil-opp.com/multiboot-kernel.html)
|
||||||
([source code](https://github.com/phil-opp/blog_os/tree/post_1))
|
([source code](https://github.com/phil-opp/blog_os/tree/first_edition_post_1))
|
||||||
- [Entering Long Mode](https://os.phil-opp.com/entering-longmode.html)
|
- [Entering Long Mode](https://os.phil-opp.com/entering-longmode.html)
|
||||||
([source code](https://github.com/phil-opp/blog_os/tree/post_2))
|
([source code](https://github.com/phil-opp/blog_os/tree/first_edition_post_2))
|
||||||
- [Set Up Rust](https://os.phil-opp.com/set-up-rust.html)
|
- [Set Up Rust](https://os.phil-opp.com/set-up-rust.html)
|
||||||
([source code](https://github.com/phil-opp/blog_os/tree/post_3))
|
([source code](https://github.com/phil-opp/blog_os/tree/first_edition_post_3))
|
||||||
- [Printing to Screen](https://os.phil-opp.com/printing-to-screen.html)
|
- [Printing to Screen](https://os.phil-opp.com/printing-to-screen.html)
|
||||||
([source code](https://github.com/phil-opp/blog_os/tree/post_4))
|
([source code](https://github.com/phil-opp/blog_os/tree/first_edition_post_4))
|
||||||
|
|
||||||
### Memory Management
|
### Memory Management
|
||||||
- [Allocating Frames](https://os.phil-opp.com/allocating-frames.html)
|
- [Allocating Frames](https://os.phil-opp.com/allocating-frames.html)
|
||||||
([source code](https://github.com/phil-opp/blog_os/tree/post_5))
|
([source code](https://github.com/phil-opp/blog_os/tree/first_edition_post_5))
|
||||||
- [Page Tables](https://os.phil-opp.com/modifying-page-tables.html)
|
- [Page Tables](https://os.phil-opp.com/modifying-page-tables.html)
|
||||||
([source code](https://github.com/phil-opp/blog_os/tree/post_6))
|
([source code](https://github.com/phil-opp/blog_os/tree/first_edition_post_6))
|
||||||
- [Remap the Kernel](https://os.phil-opp.com/remap-the-kernel.html)
|
- [Remap the Kernel](https://os.phil-opp.com/remap-the-kernel.html)
|
||||||
([source code](https://github.com/phil-opp/blog_os/tree/post_7))
|
([source code](https://github.com/phil-opp/blog_os/tree/first_edition_post_7))
|
||||||
- [Kernel Heap](https://os.phil-opp.com/kernel-heap.html)
|
- [Kernel Heap](https://os.phil-opp.com/kernel-heap.html)
|
||||||
([source code](https://github.com/phil-opp/blog_os/tree/post_8))
|
([source code](https://github.com/phil-opp/blog_os/tree/first_edition_post_8))
|
||||||
|
|
||||||
### Exceptions
|
### Exceptions
|
||||||
- [Handling Exceptions](https://os.phil-opp.com/handling-exceptions.html)
|
- [Handling Exceptions](https://os.phil-opp.com/handling-exceptions.html)
|
||||||
([source code](https://github.com/phil-opp/blog_os/tree/post_9))
|
([source code](https://github.com/phil-opp/blog_os/tree/first_edition_post_9))
|
||||||
- [Double Faults](https://os.phil-opp.com/double-faults.html)
|
- [Double Faults](https://os.phil-opp.com/double-faults.html)
|
||||||
([source code](https://github.com/phil-opp/blog_os/tree/post_10))
|
([source code](https://github.com/phil-opp/blog_os/tree/first_edition_post_10))
|
||||||
|
|
||||||
### Additional Resources
|
### Additional Resources
|
||||||
- [Cross Compile Binutils](https://os.phil-opp.com/cross-compile-binutils.html)
|
- [Cross Compile Binutils](https://os.phil-opp.com/cross-compile-binutils.html)
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ This post explains how to create a minimal x86 operating system kernel using the
|
|||||||
I tried to explain everything in detail and to keep the code as simple as possible. If you have any questions, suggestions or other issues, please leave a comment or [create an issue] on Github. The source code is available in a [repository][source code], too.
|
I tried to explain everything in detail and to keep the code as simple as possible. If you have any questions, suggestions or other issues, please leave a comment or [create an issue] on Github. The source code is available in a [repository][source code], too.
|
||||||
|
|
||||||
[create an issue]: https://github.com/phil-opp/blog_os/issues
|
[create an issue]: https://github.com/phil-opp/blog_os/issues
|
||||||
[source code]: https://github.com/phil-opp/blog_os/tree/post_1/src/arch/x86_64
|
[source code]: https://github.com/phil-opp/blog_os/tree/first_edition_post_1/src/arch/x86_64
|
||||||
|
|
||||||
Note that this tutorial is written mainly for Linux. For some known problems on OS X see the comment section and [this issue][mac os issue]. If you want to use a virtual Linux machine, you can find instructions and a Vagrantfile in Ashley Willams's [x86-kernel repository].
|
Note that this tutorial is written mainly for Linux. For some known problems on OS X see the comment section and [this issue][mac os issue]. If you want to use a virtual Linux machine, you can find instructions and a Vagrantfile in Ashley Willams's [x86-kernel repository].
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ In the [previous post] we created a minimal multiboot kernel. It just prints `OK
|
|||||||
I tried to explain everything in detail and to keep the code as simple as possible. If you have any questions, suggestions, or issues, please leave a comment or [create an issue] on Github. The source code is available in a [repository][source code], too.
|
I tried to explain everything in detail and to keep the code as simple as possible. If you have any questions, suggestions, or issues, please leave a comment or [create an issue] on Github. The source code is available in a [repository][source code], too.
|
||||||
|
|
||||||
[create an issue]: https://github.com/phil-opp/blog_os/issues
|
[create an issue]: https://github.com/phil-opp/blog_os/issues
|
||||||
[source code]: https://github.com/phil-opp/blog_os/tree/post_2/src/arch/x86_64
|
[source code]: https://github.com/phil-opp/blog_os/tree/first_edition_post_2/src/arch/x86_64
|
||||||
|
|
||||||
## Some Tests
|
## Some Tests
|
||||||
To avoid bugs and strange errors on old CPUs we should check if the processor supports every needed feature. If not, the kernel should abort and display an error message. To handle errors easily, we create an error procedure in `boot.asm`. It prints a rudimentary `ERR: X` message, where X is an error code letter, and hangs:
|
To avoid bugs and strange errors on old CPUs we should check if the processor supports every needed feature. If not, the kernel should abort and display an error message. To handle errors easily, we create an error procedure in `boot.asm`. It prints a rudimentary `ERR: X` message, where X is an error code letter, and hangs:
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ In the previous posts we created a [minimal Multiboot kernel][multiboot post] an
|
|||||||
This blog post tries to set up Rust step-by-step and point out the different problems. If you have any questions, problems, or suggestions please [file an issue] or create a comment at the bottom. The code from this post is in a [Github repository], too.
|
This blog post tries to set up Rust step-by-step and point out the different problems. If you have any questions, problems, or suggestions please [file an issue] or create a comment at the bottom. The code from this post is in a [Github repository], too.
|
||||||
|
|
||||||
[file an issue]: https://github.com/phil-opp/blog_os/issues
|
[file an issue]: https://github.com/phil-opp/blog_os/issues
|
||||||
[Github repository]: https://github.com/phil-opp/blog_os/tree/post_3
|
[Github repository]: https://github.com/phil-opp/blog_os/tree/first_edition_post_3
|
||||||
|
|
||||||
## Installing Rust
|
## Installing Rust
|
||||||
We need a nightly compiler, as we will use many unstable features. To manage Rust installations I highly recommend [rustup]. It allows you to install nightly, beta, and stable compilers side-by-side and makes it easy to update them. To use a nightly compiler for the current directory, you can run `rustup override add nightly`. Alternatively, you can add a file called `rust-toolchain` to the project's root directory:
|
We need a nightly compiler, as we will use many unstable features. To manage Rust installations I highly recommend [rustup]. It allows you to install nightly, beta, and stable compilers side-by-side and makes it easy to update them. To use a nightly compiler for the current directory, you can run `rustup override add nightly`. Alternatively, you can add a file called `rust-toolchain` to the project's root directory:
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ In the [previous post] we switched from assembly to [Rust], a systems programmin
|
|||||||
This post uses recent unstable features, so you need an up-to-date nighly compiler. If you have any questions, problems, or suggestions please [file an issue] or create a comment at the bottom. The code from this post is also available on [Github][code repository].
|
This post uses recent unstable features, so you need an up-to-date nighly compiler. If you have any questions, problems, or suggestions please [file an issue] or create a comment at the bottom. The code from this post is also available on [Github][code repository].
|
||||||
|
|
||||||
[file an issue]: https://github.com/phil-opp/blog_os/issues
|
[file an issue]: https://github.com/phil-opp/blog_os/issues
|
||||||
[code repository]: https://github.com/phil-opp/blog_os/tree/post_4
|
[code repository]: https://github.com/phil-opp/blog_os/tree/first_edition_post_4
|
||||||
|
|
||||||
## The VGA Text Buffer
|
## The VGA Text Buffer
|
||||||
The text buffer starts at physical address `0xb8000` and contains the characters displayed on screen. It has 25 rows and 80 columns. Each screen character has the following format:
|
The text buffer starts at physical address `0xb8000` and contains the characters displayed on screen. It has 25 rows and 80 columns. Each screen character has the following format:
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ In this post we create an allocator that provides free physical frames for a fut
|
|||||||
|
|
||||||
The full source code is available on [Github][source repo]. Feel free to open issues there if you have any problems or improvements. You can also leave a comment at the bottom.
|
The full source code is available on [Github][source repo]. Feel free to open issues there if you have any problems or improvements. You can also leave a comment at the bottom.
|
||||||
|
|
||||||
[source repo]: https://github.com/phil-opp/blog_os/tree/post_5
|
[source repo]: https://github.com/phil-opp/blog_os/tree/first_edition_post_5
|
||||||
|
|
||||||
## Preparation
|
## Preparation
|
||||||
We still have a really tiny stack of 64 bytes, which won't suffice for this post. So we increase it to 16kB (four pages) in `boot.asm`:
|
We still have a really tiny stack of 64 bytes, which won't suffice for this post. So we increase it to 16kB (four pages) in `boot.asm`:
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ In this post we will create a paging module, which allows us to access and modif
|
|||||||
|
|
||||||
You can find the source code and this post itself on [Github][source repository]. Please file an issue there if you have any problems or improvement suggestions. There is also a comment section at the end of this page. Note that this post requires a current Rust nightly.
|
You can find the source code and this post itself on [Github][source repository]. Please file an issue there if you have any problems or improvement suggestions. There is also a comment section at the end of this page. Note that this post requires a current Rust nightly.
|
||||||
|
|
||||||
[source repository]: https://github.com/phil-opp/blog_os/tree/post_6
|
[source repository]: https://github.com/phil-opp/blog_os/tree/first_edition_post_6
|
||||||
|
|
||||||
## Paging
|
## Paging
|
||||||
_Paging_ is a memory management scheme that separates virtual and physical memory. The address space is split into equal sized _pages_ and _page tables_ specify which virtual page points to which physical frame. For an extensive paging introduction take a look at the paging chapter ([PDF][paging chapter]) of the [Three Easy Pieces] OS book.
|
_Paging_ is a memory management scheme that separates virtual and physical memory. The address space is split into equal sized _pages_ and _page tables_ specify which virtual page points to which physical frame. For an extensive paging introduction take a look at the paging chapter ([PDF][paging chapter]) of the [Three Easy Pieces] OS book.
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ In this post we will create a new page table to map the kernel sections correctl
|
|||||||
|
|
||||||
As always, you can find the source code on [Github]. Don't hesitate to file issues there if you have any problems or improvement suggestions. There is also a comment section at the end of this page. Note that this post requires a current Rust nightly.
|
As always, you can find the source code on [Github]. Don't hesitate to file issues there if you have any problems or improvement suggestions. There is also a comment section at the end of this page. Note that this post requires a current Rust nightly.
|
||||||
|
|
||||||
[Github]: https://github.com/phil-opp/blog_os/tree/post_7
|
[Github]: https://github.com/phil-opp/blog_os/tree/first_edition_post_7
|
||||||
|
|
||||||
## Motivation
|
## Motivation
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ In the previous posts we created a [frame allocator] and a [page table module].
|
|||||||
|
|
||||||
As always, you can find the complete source code on [Github]. Please file [issues] for any problems, questions, or improvement suggestions. There is also a comment section at the end of this page.
|
As always, you can find the complete source code on [Github]. Please file [issues] for any problems, questions, or improvement suggestions. There is also a comment section at the end of this page.
|
||||||
|
|
||||||
[Github]: https://github.com/phil-opp/blog_os/tree/post_8
|
[Github]: https://github.com/phil-opp/blog_os/tree/first_edition_post_8
|
||||||
[issues]: https://github.com/phil-opp/blog_os/issues
|
[issues]: https://github.com/phil-opp/blog_os/issues
|
||||||
|
|
||||||
## Introduction
|
## Introduction
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ In this post, we start exploring CPU exceptions. Exceptions occur in various err
|
|||||||
|
|
||||||
As always, the complete source code is available on [Github]. Please file [issues] for any problems, questions, or improvement suggestions. There is also a comment section at the end of this page.
|
As always, the complete source code is available on [Github]. Please file [issues] for any problems, questions, or improvement suggestions. There is also a comment section at the end of this page.
|
||||||
|
|
||||||
[Github]: https://github.com/phil-opp/blog_os/tree/post_9
|
[Github]: https://github.com/phil-opp/blog_os/tree/first_edition_post_9
|
||||||
[issues]: https://github.com/phil-opp/blog_os/issues
|
[issues]: https://github.com/phil-opp/blog_os/issues
|
||||||
|
|
||||||
## Exceptions
|
## Exceptions
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ In this post we explore double faults in detail. We also set up an _Interrupt St
|
|||||||
|
|
||||||
As always, the complete source code is available on [Github]. Please file [issues] for any problems, questions, or improvement suggestions. There is also a [gitter chat] and a comment section at the end of this page.
|
As always, the complete source code is available on [Github]. Please file [issues] for any problems, questions, or improvement suggestions. There is also a [gitter chat] and a comment section at the end of this page.
|
||||||
|
|
||||||
[Github]: https://github.com/phil-opp/blog_os/tree/post_10
|
[Github]: https://github.com/phil-opp/blog_os/tree/first_edition_post_10
|
||||||
[issues]: https://github.com/phil-opp/blog_os/issues
|
[issues]: https://github.com/phil-opp/blog_os/issues
|
||||||
[gitter chat]: https://gitter.im/phil-opp/blog_os
|
[gitter chat]: https://gitter.im/phil-opp/blog_os
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user