跳转到主内容
极星编程网:以代码为星,赴技术山海!

自己动手写操作系统?从开机加电到保护模式切换,一步步来!

大家好,我是苏承栈,今天要和大家聊聊如何从零开始编写一个简单的操作系统内核。这篇文章是系列文章的第一篇,我们将一起经历从开机加电到切换到保护模式的全过程。

在这篇文章中,我们将学习如何安装必要的工具,编写引导扇区文件、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

这样,我们就完成了从开机加电到保护模式切换的过程。接下来,我们将继续学习如何编写更复杂的操作系统内核。

——苏承栈 敬上

想了解更多关于操作系统编程的知识?请访问极星编程网。

相关文章