本文实现了于渊在《自己动手写操作系统》第一章中的简单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 ),然后寻找启动盘,如果是选择从软盘启动,计算机就会检查软盘的 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
    


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

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐