在虚拟机下运行自制的简单“操作系统”
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, 代码如下 ( 原搬于渊的 ) :
代码原理引用于渊的
我们知道,当计算机电源被打开时,它会先进行加电自检(
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 了么, 还要多谢想于渊这样能愿意把真正有用的东西贡献出来的人。
一、准备工作
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 了么, 还要多谢想于渊这样能愿意把真正有用的东西贡献出来的人。
相关文章推荐
- MFC 简单的对话框小程序在虚拟机中运行失败
- 笔记关于自制简单的操作系统 第一弹
- 我写了一个简单的APP,用到了数据库,在程序中我自动建立了一个数据库,可以在File Explorer中找到,然后我把软件安装到虚拟机可以运行。
- 自制操作系统-最简单的系统hello World
- Win7操作系统上VMware运行移动硬盘上的虚拟机文件访问权限设定
- 虚拟机安装Debian7 后无法使用共享文件夹,提示:无法更新运行时文件夹共享状态: 在客户机操作系统内装载共享文件夹文件系统时出错。
- 无需操作系统和虚拟机,直接运行Python代码
- Vsphere简单的使用:创建资源池、虚拟机,配置虚拟机,安装操作系统
- [自制简单操作系统] 5、杂七杂八(高分辨率和键盘输入)
- 《30天自制操作系统》U盘启动,真机运行(16天)
- 30 自制操作系统,qemu的运行记录,解释run.bat的执行过程
- Windows7操作系统自定义运行命令(简单方法之二)
- 使用VMware运行最简单的操作系统
- 从一个简单的时间片轮转多道程序内核代码看操作系统如何运行
- 扫盲操作系统虚拟机[6]:如何优化运行速度?
- Windows7操作系统自定义运行命令(简单方法之一)
- 自制操作系统-最简单的系统hello World