在虚拟机下运行自制的简单“操作系统”
来源:互联网 发布: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),然后寻找启动盘,如果是选择从软盘启动,计算机就会检查软盘的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这样的代码。没错,这行代码就是告诉编译器,将来我们的这段程序要被加载到内存偏移地址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 了么, 还要多谢想于渊这样能愿意把真正有用的东西贡献出来的人。
- 在虚拟机下运行自制的简单“操作系统”
- 在虚拟机下安装Linux操作系统遇到的问题
- 自制操作系统-最简单的系统hello World
- 笔记关于自制简单的操作系统 第一弹
- 虚拟机克隆的操作系统不能运行?
- 自制操作系统2-ubuntu下的工作环境搭建
- 在VS2010下,通过MFC用EditBox + ListBox自制ComboBox(附加简单的模糊搜索功能)
- win10在vbox虚拟机下运行
- 30 自制操作系统,qemu的运行记录,解释run.bat的执行过程
- AMD的CPU在WIN7系统下基于虚拟机搭建MAC OS 10.6.3 操作系统
- 在虚拟机下安装Linux RedHat(红帽)操作系统的图解步骤
- 在opensuse操作系统下简单编程指南
- 使用VMware运行最简单的操作系统
- 虚拟机下操作系统安装
- 在win7下运行vmware如何让虚拟机下的linux上网
- Heritrix在Windows下的运行和简单任务设置
- 在ubuntu下运行的简单php脚本【生猴子】
- 利用虚拟机在windows XP下安装ubuntu操作系统
- 浅析.Net下Active Directory编程技术
- 有好的用友U8工资管理系统的工具~
- 数据库的排它访问权
- Using Hadoop IPC/RPC for distributed applications
- Delphi串口DCB结构详解
- 在虚拟机下运行自制的简单“操作系统”
- Begining
- 避免istream多读一行的办法
- Scrum与Lean软件开发及应用
- hibernate 的关联映射
- HQL查询
- 什么是spring
- 如果干双份工作给我双份工资的话
- C#类继承