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

来源:互联网 发布:2016淘宝刷单新规 编辑:程序博客网 时间:2024/06/11 19:52

本文实现了于渊在《自己动手写操作系统》第一章中的简单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, 代码如下 ( 原搬于渊的 ) :


代码原理引用于渊的

我们知道,当计算机电源被打开时,它会先进行加电自检(POST),然后寻找启动盘,如果是选择从软盘启动,计算机就会检查软盘的00磁道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这样的代码。没错,这行代码就是告诉编译器,将来我们的这段程序要被加载到内存偏移地址7c00处。

开始-运行- cmd
   


成功后生成了 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 了么, 还要多谢想于渊这样能愿意把真正有用的东西贡献出来的人。