操作系统环境配置
这学期开设了操作系统课程,需要我们从裸机开始写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参数指跳过前面几个扇区
创建虚拟机
- 打开VirtualBox,点新建,名称XXXPC,类型Other,版本Other/Unknown
- 内存大小设最小4M即可
- 不添加虚拟硬盘,然后创建
- 在创建的XXXPC那里点设置-存储-添加软盘控制器
- 在“控制器:Floppy后”点添加虚拟软驱
- 添加刚才构造好的
img文件
可以见到此时虚拟机的启动顺序为软驱、光驱、硬盘
其他补充
x86汇编语言
详情见x86汇编语言
ASCII码表对照

参考资料
详细的OS实验请见Lab1
部分参考资料已在前文以超链接的形式列出
- 李忠,《x86汇编语言-从实模式到保护模式》
- Linux dd指令使用详解,https://www.cnblogs.com/jikexianfeng/p/6103500.html