内核笔记 - Hello World
前段时间我就已经读完了《x86汇编语言:从实模式到保护模式》这本书,并且认真的读完了后半部分保护模式,各种概念已经理解清楚了,所以打算将学到的东西真正实现出来,作为巩固。
书中已经配套了一个小内核源码,而且是完全用汇编写的,但我肯定不能用汇编去写,我将采用C语言来实现相关功能。
实现的过程中除了会参考这本书之外,还会借鉴一些开源的内核代码,比如xv6等。
准备工作
写之前要有一些准备工作:
- Ubuntu
- Grub
- qemu
由于写一个Bootloader比较麻烦,所以我先采取用Grub做引导,这样我就能先关注内核更主要的部分。
Hello,World
这是Grub Multiboot规范的内核入口,当然,这段代码我是copy别人的,因为规范就是这样。
boot.s
1 | [bits 32] |
这是内核入口,先写一个基本能用的打印函数。
Kernel.c:
1 | void kwrite(char *str){ |
不过这个打印函数还不够通用,后面我会逐渐完善。