这学期开设了操作系统课程,需要我们从裸机开始写OS,这篇文章将记录完整的配置过程。
由于大多操作系统实验书籍都采用软盘做引导,但是现在早就没有软盘了,所以只能自己虚拟一个出来。 注意软盘的英文是floppy disk!
Linux环境下创建虚拟软盘十分简单,用mkfs
指令即可。
这里我们创建一个1.44M的虚拟软盘。
(古老的算法中将1MB=1000KB…)
/sbin/mkfs.msdos -C mydisk.img 1440
注意这条指令还将创建的软盘格式化了,即可直接作为引导盘使用。
在我的系统上会显示mkfs.fat 4.1 (2017-01-24)
,意味着已经格式化完毕。
下面给出一个简单的Hello world
汇编程序
; hello.asm
mov ax, 0xb800
mov ds, ax
mov byte [0x00],'H'
mov byte [0x02],'e'
mov byte [0x04],'l'
mov byte [0x06],'l'
mov byte [0x08],'o'
mov byte [0x10],'W'
mov byte [0x12],'o'
mov byte [0x14],'r'
mov byte [0x16],'l'
mov byte [0x18],'d'
jmp $ ; forever loop
; The last two bytes of the sector should be 0x55aa
times 510-($-$$) db 0
db 0x55,0xaa
用nasm
进行编译
nasm hello.asm -o hello.bin
生成二进制文件流。
用Linux内置的dd
指令将编译出来的二进制文件复制到虚拟软盘中
dd if=hello.bin of=myname.img bs=1440k conv=notrunc
注:seek
参数指跳过前面几个扇区
img
文件可以见到此时虚拟机的启动顺序为软驱、光驱、硬盘
详情见x86汇编语言
详细的OS实验请见Lab1
部分参考资料已在前文以超链接的形式列出