Bochs User Manual (Chinese version)
Bochs 用户手册 (中文版)
Boch介绍
Bochs是什么?
Bochs是模拟一个完整Intel x86机器的程序。它可以被配置来模拟一个286,386,486,Pentium或者Pentium Pro. Bochs解释从加电到重启动的每一条指令,并且包含所有的标准外设模块:键盘、鼠标、VGA卡/显示器、磁盘、定时器芯片、网卡等。由于Bochs模拟整个PC环境,在模拟器上运行的软件“相信”它是运行在一个真实的机器上。这一方法使得Bochs可以不加修改的运行大量的软件,包括最流行的各种X86操作系统: Windows 95/98/NT, 所有的Linux,所有的BSD以及其他更多。
Bochs使用C++编写,被设计在各种平台上运行[1],包括x86, PPC, Alpha, Sun和MIPS. 不论宿主平台是什么类型,Bochs始终模拟x86平台。换句话说,它不依赖于宿主平台的本地指令集。这是Bochs的优点也是缺点,同时这是Bochs与其他x86仿真软件诸如plex86、Vmware等的主要区别。由于Bochs用软件来模拟每一条x86指令,它可以在一台Alpha或者Sun工作战上模拟Windows应用程序。但是Bochs方法的缺陷是模拟性能。为了对处理器精确建模,Bochs对每一条x86指令必须用数条指令来模拟,并且这使得被模拟
的机器笔实际的屋里机器慢数倍。商业PC模拟器(Vmware, Connectix等)可以通过虚拟化virtualization[2]技术得到高得多的性能,但是他们既不能移植到非x86平台也不是开发源码的。Plex86项目正向着一个使用虚拟化的开发源码x86模拟器前进。
为了能在被模拟的机器上做任何事情,Bochs需要和宿主机器上的操作系统(the host OS)交互。当你在Boch的显示窗口中按下一个按键的时候,一个按键事件被发给键盘的设备模块。当被模拟的机器需要从被模拟的硬盘上读取数据时,Bochs从宿主机器上的磁盘镜像文件读取。当被模拟的机器象本地网络发送一个包时,Bochs使用宿主平台的网卡将消息包发送到实际的网络中。这些Bochs与宿主操作系统的交互会很复杂,并且某些情况下时和特定的宿主平台相关的。例如在FreeBSD中发送一个网络包与在Windows95中发送要使用不同的源代码。基于上述原因某些特性会在某些宿主平台上得到支持而在其他平台上不支持。在Linux上Bochs可以模拟一个和实际网络通信的网卡,但是在BeOS上无法模拟网卡,因为在设备模块和BeOS操作系统直接通信的代码还没有写。
Bochs由Kevin Lawton在1994年开始编写。一开始它时一个商业产品,可以购买源代码。最后在2000年3月份,Mandraksoft购买了Bochs并且以GNU LGPL授权方式使他成为开放源码。在2001年三月,Kevin帮助其他开发人员将所用的Bochs活动从bochs迁移到新网站bochs.sourceforge。从此之后Bochs项目在新居安置下来
,并且在发布新版本的时候经常成为SourceForge当周最活跃的项目。
谁会使用Bochs
估计有多少人试着或者经常使用Bochs时很难的,但是一些统计数字可以给予指示。Bochs开发者邮件列表,作为bugs和发布新闻的主要来源有超过400位订户。最新的版本在SourceForge上被下载了超过5万次,这一数字并没有加上镜像web站点和CVS用户。
Bochs有许多潜在的用户,同时不同的人为了不同的目的而使用它。许多人用它来在第二个操作系统中运行应用程序而不需要两台不同的机器或者在一台机器上使用双启动。在非x86的工作站或者在x86的unix平台上运行Windows软件是一种通常的用法。同时,又有每一个硬件指令和每一行模拟器代码都可以访问到,Bochs被进一步用来调试新的操作系统。如果你在为你的家用型x86操作系统写启动代码并且运行有问题的时候,在bochs上引导它将让你看到运行的细节。Bochs的条时期让你快速模拟或者降低速度,并且在任何你象观察内存内容和处理器寄存器状态的时候暂停。或者,如果你想研究程序中那部分代码占用了大部分时间,你可以使用Bochs来测量那些代码的执行频度。
Bochs也被用来作为操作系统课程的教学工具,学生梦可以通过使用和修改它来学校PC硬件是如何工作的。加入一种新的外设可以作为课程的final project,由此他们不得不学习所有有关I/O端口,中断和设备驱动。在工业界它可以用来在现代硬件上支持传统应用,并且在检测新的x86兼容硬件时作为一个参考模型。
有多少Bochs的用户可能就有多少种用法。你希望运行你那些老的DOS游戏吗?或者学习如果在Linux下编程,同时无需离开你的Windows桌面?或者对你的打印机驱动程序做反向工程?这得由你自己来决定。
Bochs对我合适么?
Bochs对于某些应用非常有用,同时对于其他应用则不那么合适。这一部分试图回答这一问题,“Bochs适合你吗?”。
Bochs可能适合也可能不适合你,这依赖与你想做什么。可能你仅仅是为了在Linux上运行一两个Windows应用,或者倒过来。可能你最关心的问题是速度和性能。可能你并不在意在这里或者那里放上一些相同的文件以使得其他应用可以在相同设置下工作。当你的目的是在x86上模拟x86硬件的时候,Plex86, Wine, 和VMware可能是你最好的选择。
另一方面,可能你有一个重要的应用,而它只能在古老的硬件和古老的操作系统上才能很好的运行。你已经意识倒这种硬件的生命周期已经快走到终点了,并且你备份或者存储的硬件和工具对你所拥有的数据而言已经不足。你需要在网络上传输一个备份的磁盘映象,并且试图利用现代程序来维护硬件。可
能这样的应用足够重要倒会在一个大型的计算机上运行,例如64位的机器,或者一台mainframe。在这种情况下Bochs是一个不错的选择。
可能你的目的是调试软件或者硬件驱动。Bochs提供了一个可控制的环境以更好的帮助你来决定原因和结果之间的关系。你可以通过snapshots开观察在现象下面究竟是什么。你可以分离出引起崩溃的代码行。你可以有多个映象并且在一个微细的粒度下比较他们。在这样的情况下,Bochs可以节约你的额时间和资源。
信息即使笔其他领域的变化都快。很容易就忘记了那些来来去去的过渡软件。但是任何领域的历史都是重要的,并且为了建造未来,了解过去是相当重要的。但是计算机程序员不没有想建筑师那样的便利可以之间到希腊旅游并触摸那些柱子。大多数计算机科学的历史被遗落在相关的软盘和硬件中。Bochs的好处师给你一个或者更加完整的的环境用来理解第一手的操作系统和程序行为。这是象Wine这样的“仿真器”所不能实现的。
它能为我工作吗?
Bochs是否能够为你工作取决于你主机的硬件,宿主操作系统和客户操作系统,客户软件,已经你在文档帮助下使用命令行环境来工作的能力。这里没有Gui图形界面或者Wizard精灵向导来帮助你完成安装。在你安装客户操作系统的时候你也没有恢复或者安装盘来帮助你。Bochs只提高给你“虚拟”硬件,剩下的都取决于你。
Bochs运行在Windows、Linux、FreeBSD、OpenBSD或者BeOS。如果你运行在x86硬件上,你有很多
选择。查看安装部分与你宿主平台相关的说明来了解对于你的平台Bochs究竟哪些选项。如果最重要的因素是速度,可能你更希望使用虚拟机产品(Vmware,plex86)而不是Bochs。
如果你使用的是非x86机器,那么Bochs是仅有的几个运行x86软件的选择之一。已经知道Bochs可以在Solaris(Sparc),Linux(PowerPC/Alpha),MacOS(PowerPC),IRIX(MIPS),BeOS(PowerPC),Digital UNIX(Alpha)和AIX(PowerPC)上工作。
你也可以在Bochs的Web站点的测试状态页面上到更详细的测试信息。
Bochs许可证
Bochs的版权属于MandrakeSoft[1] S.A. 并且在GNU Lesser Gneral Public License[2]下发布(注意是LGPL而不是一般的GPL)。下面的一段文字将出现在每一个源代码文件的顶部:
这个库是自由软件:你可以在由自由软件基金会发发布的GNU Lesser General Public Liscense第二版许可证(或者你希望的其他后期版本)下再次发布或者修改它。
发布这些库是希望他们能够切实有用,但是没有任何保证条款:没有任何隐含的对功能性或者对特殊目的的适用性的保证。可以从GNU Lesser General Public Liscense得到更多的细节信息。
伴随这个库,
你应该已经收到一份GNU Lesser General Public Liscense的拷贝;如果没有的话,请写信到自由软件基金会,美国麻省波士顿59区330套房。
第三方软件许可和临时文件
当你在Bochs的PC仿真环境中安装或者使用任何其他操作系统,BIOS或者其它软件包是,确定你会遵从希望安装的软件中包含的所有软件许可。提供所有要安装或者使用软件的许可和记录完全是你的责任。同时遵守其中的软件许可证也完全是你的责任。
<!--[if !supportEmptyParas]--> <!--[endif]-->
特性
下面的表格现实了Bochs的特性已经他们现在可以在哪些平台上使用。
表格 1 bochs 的特性
特性
支持?
描述
配置脚本
Yes
Bochs使用GNU autoconf来配置Makefiles和头文件header。Autoconf帮助Bochs在大量平台上编译
386,486,Pentium仿真
Yes
Bochs可以被配置来仿真数个系列的Intel硬件。某些Pentium的特性也被支持,诸如时标计数器
Pentium Pro 仿真
未完成
许多Pentium Pro的特性都支持,诸如对SMP模拟用的片内APIC
命令行调试器
Yes
强力的命令行调试器(可选)让你暂停执行并且检查寄存器和存储器,设置断点。等等
浮点
Yes
使用由Bill Metaenthen写的软件浮点例程
增强的BIOS
Yes
实现了Eltorito规格,EDD v3.0,PCI32目录服务
VGA
Yes
在一个窗口中仿真VGA彩图形
VESA(显示)支持
Yes
现在支持达到1024×768×8pp的分辨率(所以没有16/24/32位模式)。你必须开启vbe并且使用LGPL下的VGABIOS
Floppy disk
Yes
支持全部平台上的软磁盘映象:1.44M 3.5”, 1.2M 5.25”, 和 720K 3.5”。在Unix和Windows XP/NT/2000上Bochs可以之间访问物理软磁盘驱动器
多ATA通道
Yes
仿真达到4个ATA通道,可以仿真连接8个ATA/ATAPI设备,每个ATA通道两个设备。因此可以连接8个硬盘或者7个硬盘一个cdrom光驱或者4个硬盘和4个光驱,或者一个硬盘和7个光驱等。
硬盘
Yes
通过映象文件仿真ATA-2/IDE硬盘驱动器。对某些结果的硬盘支持直接访问,但是不建议使用,主要出于安全的原因。在支持大文件访问的平台傻瓜,可以支持容量到32GB的硬盘。
CDROM光驱
Yes
仿真ATAPI-4/IDE CDROM光驱。光驱可以从任何平台上的ISO光盘映象文件中读取数据。在Windows(95/98/NT/2000),Linux,SunOS,FreeBSD,NetBSD,Amiga/MorphOS,和BeOS,Bochs可以直接从物理光驱中读取数据。从1.4版开始,Bochs可以通过可引导光盘或者可引导ISO映象文件引导。
Keyboard
Yes
使用北美键盘映射来仿真一个PS/2键盘。在X11中提供可选择的键盘部件重映射文件(德语、法语、意大利语、西班牙语、丹麦语、瑞典语)
Mouse
Yes
仿真2键PS/2鼠标
声卡开放源代码意味着什么
Yes
仿真16位声卡。在Windows,L
inux和FreeBSD上可以将输出直接送到宿主机的声音系统。在MacOSX上还不支持
网卡
Yes
模拟一个兼容NE2000的网卡。在Windows NT/2000,Linux,FreeBSD,和NetBSD上,Bochs可以将网络包定向到操作系统中,因此客户操作系统可以和物理网络通讯。不幸的是在某些平台上客户操作可以可以和网络中的其他机器通信而无法和宿主机器通信。在Windows和其他运行TAP或者TUN/TAP接口的系统上,没有这一限制。通常宿主机器被配置成客户操作系统可以访问互联网。在MacOSX还不可以在客户于宿主之间定向网络包
并口
Yes
并行口仿真由Volker Rupper在Bochs 1.3加入。由客户操作系统发送到并口的数据可以存到文件中或者直接送到并口设备(只能UNIX)
串口
Yes
串口(单个16450UART仿真)至少在客户和宿主操作系统都是Linux时是可用的。采用其他操作系统(作为宿主或者客户操作系统)的状态未知。
PCI
未完成
Host-to-PCI桥和主存控制器是可用的。但是PCI-to-IDE, PCI-to-USB或者其他PCI卡还没有完全实现
Plugins
Yes
Plugins在Linux,MacOS X,Solaris和 Cygwin上都支持
16/32 bit addressing
Yes
16或32位操作数,堆栈和寻址
V8086/paging
Yes
虚拟-8086模式和分页paging
PIC
Yes
主从可编程中断控制器
CMOS功能
Yes
CMOS功能
动态翻译/虚拟话
No
由于Bochs设计目的是可移植,它不不试图做任何动态代码翻译和虚拟化。参照 Bochs是什么? 得到更多细节
模拟一个多处理器
Yes
Bochs可以被配置来模拟多达15个处理器。这项特性还在试验阶段,但是它可以引导有SMP支持的linux 2.2内核。请注意这并不意味着Bochs可以在一个物理的SMP机器上更快运行。
针对SMP的优化
NO
现在Bochs没有使用线程或者并行处理即使,因此在多处理器硬件环境下它并不会运行得更快。
拷贝和粘贴
Yes
文本模式屏幕删得文字可以导入到剪贴板。剪贴板中得文字同时可以通过Bochs被粘贴到客户操作系统,就像模拟的键盘输入一样。
现在已经支持的平台
表格 2 支持的平台
Unix/X11
X windows作为Kevin Lawton的主要开发平台,总是被很好的支持。Bryce Denney现在维护Unix/X11平台。大多数特性和修改(并非全部)都首先在Unix上试验然后移植到其他平台
Win32
这一移植由David Ross实现,现在由Don Becker。你可以用MS Visual C++ 5.0 或者6.0或者cygwin来编译。从安装章节的用微软C++在Win32环境下编译部分可以获得编译指令。
BeOS
Kevin Lawton写了这部分移植,一开始使用CodeWarrior移植到R3/PPC。现在它可以在有egcs的R4/x86上工作。Simon Huet继续维护/重写了BeOS GUI移植。在2001年9月,Yellow Tab公司的Bernd Korz接管了BeOS/Zeta
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论