操作系统环境配置

这学期开设了操作系统课程,需要我们从裸机开始写OS,这篇文章将记录完整的配置过程。

环境说明

  • Windows 10 + Ubuntu 18.04 (LTS)
  • gcc 7.3.0 + nasm 2.13.02
  • Oracle VM VirtualBox 5.2.8

创建虚拟软盘

由于大多操作系统实验书籍都采用软盘做引导,但是现在早就没有软盘了,所以只能自己虚拟一个出来。 注意软盘的英文是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

生成二进制文件流。

dd指令

用Linux内置的dd指令将编译出来的二进制文件复制到虚拟软盘中

dd if=hello.bin of=myname.img bs=1440k conv=notrunc

注:seek参数指跳过前面几个扇区

创建虚拟机

  1. 打开VirtualBox,点新建,名称XXXPC,类型Other,版本Other/Unknown
  2. 内存大小设最小4M即可
  3. 不添加虚拟硬盘,然后创建
  4. 在创建的XXXPC那里点设置-存储-添加软盘控制器
  5. 在“控制器:Floppy后”点添加虚拟软驱
  6. 添加刚才构造好的img文件

可以见到此时虚拟机的启动顺序为软驱、光驱、硬盘 virtual machine

其他补充

x86汇编语言

详情见x86汇编语言

ASCII码表对照

ascii

参考资料

详细的OS实验请见Lab1

部分参考资料已在前文以超链接的形式列出