|
《自己动手写操作系统》一书开篇介绍了一个“引导扇区”代码,实现了启动后在屏幕上显示红色“Hello OS world!”的功能。遗憾的是,作者使用的工作平台是Windows,创建软盘镜像等过程太过繁复。我这篇笔记是想说明一下在LINUX平台下做这个实验的步骤。
你需要准备些什么:
1、nasm汇编器,我用的gentoo已经默认就有了
2、vmware workstation,原谅我使用盗版软件。我的qemu没有编译成功,而且vmware工作得也很好,也就没有折腾着一定要装一个开源软件了。
下面编辑一个boot.asm文件如下:
- org 07c00h
- mov ax, cs
- mov ds, ax
- mov es, ax
- call DispStr
- jmp $
- DispStr:
- mov ax, BootMessage
- mov bp, ax ;es:bp = 串地址
- mov cx, 16 ;cx = 串长度
- mov ax, 01301h
- mov bx, 000ch
- mov dl, 0
- int 10h
- ret
- BootMessage: db "Hello, OS world!"
- times 510-($-$$) db 0 ;填充剩下的空间,使生成的二进制代码恰好为512字节
- dw 0xaa55
复制代码
用nasm编译:
$ nasm boot.asm -o boot.bin
这样就得到了一个512字节的boot.bin文件了,这个就是软盘启动扇区里面应该放的代码。你可以用下面这个命令生成软盘镜像文件:
$ dd conv=sync if=boot.bin of=boot.img bs=1440k count=1
这样我们就得到软盘镜像boot.img了。注意命令中的conv=sync,使用这个选项后可以使得在把每个输入块填充到ibs个字节时,不足部分用空(NULL)字符补齐。在这个例子里由于输入文件只有512个字节,输出文件却需要1.44MB所以我用了这个选项。
下面,用vmware新建一个虚拟机,把软驱设置为刚才生成的镜像,启动系统,就可以得到预期的效果了。怎么样,是不是很简单呢? |
|