您的位置:首页 > 其它

在虚拟机下运行自制的简单“操作系统”

2009-09-24 16:20 239 查看
本文实现了于渊在《自己动手写操作系统》第一章中的简单Floppy引导的“操作系统“

一、准备工作

NASM:

http://www.nasm.us/pub/nasm/releasebuilds/2.07/win32/

在环境变量里配置 Path

Virtual PC 2007:
http://download.microsoft.com/download/8/5/6/856bfc39-fa48-4315-a2b3-e6697a54ca88/32%20BIT/setup.exe
Microsoft 的虚拟机软件,个人感觉不错

WinImage:

http://www.crsky.com/soft/281.html

制作空 Floppy 的软件

FloppyWritter

http://www.pudn.com/downloads82/sourcecode/windows/file/detail317402.html

此程序把生成的 .bin 二进制代码 COPY 到 .img 文件前 512 Byte。解压后是个 VC6 下的 MFC 工程,需要自己编译下(什么你没有 VC6,OMG ,如果没有需要借助 UltraEdit 手动敲了 “D)

二、动手开始

编辑 boot.asm, 代码如下 ( 原搬于渊的 ) :

org 07c00h ; 告诉编译器程序加载到7c00处
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 ; ah = 13, al = 01h
mov bx, 000ch ; 页号为0(bh = 0) 黑底红字(bl = 0Ch,高亮)
mov dl, 0
int 10h ; 10h 号中断
ret
BootMessage: db "Hello, OS world!"
times 510-($-$$) db 0 ; 填充剩下的空间,使生成的二进制代码恰好为
; 512字节
dw 0xaa55 ; 结束标志


代码原理引用于渊的

我们知道,当计算机电源被打开时,它会先进行加电自检(
POST

),然后寻找启动盘,如果是选择从软盘启动,计算机就会检查软盘的
0


0

磁道
1

扇区,如果发现它以
0xAA55

(假如我们把此扇区看做一个字符数组
sector[]

的话,那么此结束标志相当于
sector[510]=0x55

,且
sector[511]=0xAA

)结束,则
BIOS

认为它是一个引导扇区,也就是我们说的
Boot Sector

。当然,一个正确的
Boot Sector

除了以
0xAA55

结束之外,还应该包含一段少于
512B

的执行码。

好了,一旦
BIOS

发现了
Boot Sector

,就会将这
512B

的内容装载到内存的
0000:7c00

处,然后跳转到
0000:7c00

处将控制权彻底交给这段引导代码。到此为止,计算机不再由
BIOS

中固有的程序来控制,而变成由操作系统的一部分来控制。

现在,你可能明白了为什么在那段代码的第一行会出现
org 07c00

这样的代码。没错,这行代码就是告诉编译器,将来我们的这段程序要被加载到内存偏移地址
7c
00

处。

开始-运行- cmd

Nasm boot.asm –o boot.bin





成功后生成了 boot.bin 文件, 查看下大小 512 bytes。

使用 WinImage 生成一个空的 IMG 文件,用默认大小 1.44M , Save AS ,将文件名称改成 os.img ,WinImage默认保存文件后缀是 IMZ



把boot.bin 的二进制内容COPY 到boot.img头部

打开编译好的 FloppyWriter.exe,界面相当简单

点击Write File to Image 选择 boot.bin



成功后在第二个对话框中选择 boot.img

注意:如果没有编译FloppyWriter.exe需要使用16进制编辑器手动操作了。

程序提示成功后,主干工作就完成了!

很好 boot.img 就是我们最终想要的 Floppy 引导盘镜像了,下一步就要运行它了。

三、运行”系统“

运行 Virtual PC 2007

建立一个新的虚拟机,过程大家摸索一下。

建立成功的虚拟机如图, Start 启动,需要配置下 Floppy 找到 boot.img



Reset 下虚拟机

Waitting…



看到久违的 Hello, OS World 了么, 还要多谢想于渊这样能愿意把真正有用的东西贡献出来的人。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: