大家好,我是苏承栈,今天要和大家聊聊如何从零开始编写一个简单的操作系统内核。这篇文章是系列文章的第一篇,我们将一起经历从开机加电到切换到保护模式的全过程。
在这篇文章中,我们将学习如何安装必要的工具,编写引导扇区文件、Makefile,以及如何编译和运行我们的操作系统。读完这篇文章,你将能够理解操作系统的基本工作原理,并掌握编写操作系统内核的基本步骤。
安装工具
首先,我们需要安装一些工具,包括qemu和nasm。qemu用于模拟硬件环境,nasm用于汇编代码。
- 安装qemu:
sudo apt install qemu-system-i386 - 安装nasm:
sudo apt install nasm
编写引导扇区文件boot.s
引导扇区是操作系统启动的第一步,我们需要编写一个简单的引导扇区文件boot.s。
BITS 16
org 0x7c00
; 初始化段寄存器
xor ax, ax
mov ds, ax
mov ss, ax
mov es, ax
mov sp, 0x7c00
; 打印消息
printStr:
mov ax, 0x1301
mov bx, 0x0002
mov cx, len
mov dx, 0x0101
mov bp, msg
int 0x10
msg: db "oh~ hello labOS!", 10, 0
len: equ 18
; 填充到510字节
times 510-($-$$) db 0
; 结尾标志
dw 0xaa55
编写Makefile文件
Makefile用于自动化编译过程。我们需要编写一个Makefile文件来编译boot.s文件。
V := @
OSIMG := labOS.img
all: $(OSIMG)
boot.o: boot.s
$(V)nasm $< -o $@
$(OSIMG): boot.o
$(V)dd if=/dev/zero of=$@ count=100
$(V)dd if=$< of=$@ conv=notrunc
clean:
$(V)rm *.img
$(V)rm *.o
编译并运行
现在我们可以编译并运行我们的操作系统了。
make
qemu-system-i386 -drive file=labOS.img,format=raw,media=disk -monitor stdio
这样,我们就完成了从开机加电到保护模式切换的过程。接下来,我们将继续学习如何编写更复杂的操作系统内核。
——苏承栈 敬上
想了解更多关于操作系统编程的知识?请访问极星编程网。
