【OS学习笔记】七 Bochs的下载、安装和配置

参考:《X86汇编语言-从实模式到保护模式》-李忠。纯学习笔记,更详细内容请阅读正版书籍。

1 开源的BOCHS虚拟机软件

Bochs是开源软件。它用软件来模拟处理器取指令和执行指令的过程,以及整个计算机硬件。当它开始运行时,就直接模拟计算机的加电启动过程。正是因为如此,它才可能对我们的程序进行调试。因为我们的程序是在没有操作系统的环境下直接交给处理器处理的。

很重要的一点是,它本身就是一个虚拟机,类似于VirtualBox。因此,它也就很容易让你单步跟踪硬盘的启动过程,查看寄存器的内容和机器状态。

2 BOCHS软件的下载和安装

要使用Bochs,首先要从它的官网下载安装程序。下载地址是:

http://sourceforge.net/projects/bochs/files/bochs/

打开这个网络链接后,将出现图1所示的网页,该网页显示了Bochs软件的所有历史版本。一般来说,应当选择最新的版本下载,比如图中所示的2.6版。
在这里插入图片描述

Bochs的每一个版本都是针对不同平台开发的。因此,当你选择了一个版本后,将进入另一个页面,允许你选择一个适用于自己当前机器的安装程序。如图2所示。

在这里插入图片描述

从图中可以看出,Bochs虚拟机的安装程序很小,只有几兆字节,而且Windows用户的下载量最多。别人下载什么我们也下载什么,这总是不会错的,因此,我们就下载Bochs-2.6.exe。

下载工作完成后,剩下的就是运行该安装程序,将Bochs软件安装到你的计算机上。如果你的操作系统是Windows 7,那么安装程序运行时,将出现一个安全提示。不要理会它,继续运行安装程序即可。

3 BOCHS虚拟机的配置

如图3所示,在Bochs的工作文件夹(取决于实际安装的位置,该位置在安装的过程中可以选择和指定)下,有两个程序,分别是bochs.exe和bochsdbg.exe。我们说过,Bochs是虚拟机软件,可以作为类似于VirtualBox的虚拟机来使用。在这种情况下,你应当使用bochs.exe。相反,如果你希望用Bochs来调试程序,那么,应当使用bochsdbg.exe,它的意思是“Bochs调试”(Bochs Debuger)。
在这里插入图片描述

因为是要调试程序,所以我们应当运行bochsdbg.exe程序。每当该程序运行时,都会出现如图4所示的起始界面。

在这里插入图片描述

和VirtualBox一样,Bochs也只是一台虚拟的计算机。因此,它需要做一些配置工作,比如,设置内存的大小、硬盘的数量和类型,等等。相对于VirtualBox,Bochs可以自定义的项目更多些。

在第一次使用Bochs时,一定要做一些设置工作。

Bochs可以提供一些默认的设置,这些默认的软、硬件参数对调试本书的程序来说已经足够。因此,我们仅仅设置一下硬盘参数就可以了。如图5所示,在“Bochs Start Menu”窗口中,双击“Edit Options”列表框中的“Disk & Boot”,该项目用于设置磁盘和计算机启动的参数。双击之后,将弹出另一个界面,该界面上有6个标签页,分别是“Floppy Options”、“ATA channel 0”、“ATA channel 1”、“ATA channel 2”、“ATA channel 3”和“Boot Options”。

“Floppy Options”是和软磁盘驱动器有关的设置。软磁盘在历史上曾经是非常标准和流行的配置,现在已经基本绝迹,所以,可以不用管它。

ATA是很多人熟悉的硬盘接口标准,PATA就是我们以前使用的IDE接口,SATA是当前正在流行的新标准。每台计算机可以有两个以上的ATA通道,以插接多块硬盘和光盘驱动设备。对于每台计算机来说,“ATA channel 0”总是必备的,因此我们一会儿就来设置它。

“Boot Options”是和计算机启动有关的选项,主要用于指定先从哪个设备(硬盘或光盘驱动器)启动。

先来设置主硬盘。单击“ATA channel 0”,此时,如图5-19所示,将在该标签页的内部出现另一个标签页。其中,“ATA channel 0”页面用于选择是否开启该通道,一般默认是选择开启,不用管它;每个磁盘通道可以有两块磁盘设备,一主一副。因此,“First HD/CD on channel 0”页面用于设置该通道的主盘类型,“Second HD/CD on channel 0”页面用于设置该通道的副盘类型。

如图中所示,单击“First HD/CD on channel 0”标签页,设置主硬盘。按图中所示,应当先勾选“Enable this device”(允许该设备)。

和VirtualBox一样,Bochs虚拟机可以使用文件来模拟物理上的硬盘设备。尤其是,它可以接受VHD虚拟硬盘文件格式。

在这里插入图片描述

一般来说,你会选择VirtualBox虚拟机来观察运行结果,调试程序时使用Bochs。因此,最好是它们共用同一个虚拟硬盘文件。为此,如图中所示,在“Path of physical device name”一栏中,选择VirtualBox所使用的VHD文件,具体的位置依你的实际情况而定。

因为使用的是VHD硬盘文件,所以,要在“Type of disk image”一栏中选择“vpc”。毕竟,VHD文件格式是微软为Virtual PC定制的。

即使是指定了“VPC”的磁盘格式,并给出了虚拟硬盘文件,该界面也不会自动检测出该硬盘的参数来。因此,如图中所示,还需要手工给出该磁盘的柱面数、磁头数,以及每磁道扇区数。如果你选用的是配书软件包中的LEECHUNG.VHD文件,可以照图中所示的参数填写。否则,你应该先用FixVhdWr.exe程序得到VHD的参数,然后填写到这里。

在这里插入图片描述

设置了一块硬盘之后,并意味着配置任务的结束。想想看,一台计算机可以配备好几块硬盘和光盘驱动器,到底在加电之后,从哪块磁盘启动计算机呢?

如图6所示,还要打开“Boot Options”标签页,设置启动参数。
“Boot drive #1”首选的启动设备。应当选择“磁盘”,即选择“disk”。磁盘分软盘和硬盘,但软盘已经不再使用,所以,应当按图中所示,跳过软盘启动信号检查。即,勾选“Skip Floppy Boot Signature Check”。

最后,我们没有安装任何操作系统,所以在“Which operation system?”一栏选择“none”,意思是没有。

一旦做完了以上工作,可以点“确定”按钮返回到图4的启动界面。在那个界面上,我们应当单击“Save”按钮,来保存以上的设置参数。

如图7所示,Bochs会弹出一个对话框,让你选择一个配置文件名,以及该文件将被保存的位置。
在这里插入图片描述

Bochs提供了一个默认的文件名“bochsrc.bxrc”,应当保持这个名字不变。同时,如图中所示,要将该文件保存的位置指定到Bochs的安装文件夹。之所以这样做,是因为,每次当Bochs启动时,它都会在自己的工作目录下寻找默认的配置文件。

至此,Bochs的下载、安装和配置工作就完成了。

每次Bochs启动时,都会出现图4的启动界面。不要管它,只需直接单击“Start”即可,Bochs会自动在其工作目录下找到默认的配置文件,并按那里面的参数启动。

Bochsdbg启动后,你就可以做调试工作了。具体的调试方法,参见书中的描述。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/423056.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【OS学习笔记】八 实模式:编写主引导扇区代码-另一种更高效的写法

学习交流加 个人qq: 1126137994个人微信: liu1126137994学习交流资源分享qq群: 962535112 上一篇文章,我们用比较原始的方法编写了主引导扇区的代码。点击链接查看上一篇文章:编写主引导扇区代码 本片文章将学习以下内…

【OS学习笔记】九 实模式:从汇编的角度理解栈结构

上一篇文章以一种更加高效的方法编写了主引导扇区的代码。主要是引入了循环和跳转指令。点击链接查看上一篇文章:编写主引导扇区代码-另一种更高效的写法 本篇文章,继续上一篇文章的学习。同样还是编写汇编代码加载到主引导扇区让CPU直接执行。但是我们…

【OS学习笔记】十 实模式:实现一个程序加载器-程序加载器如何将用户程序加载到内存并执行

上一篇文章学习了以下内容: 用一种不同的分段方法,从另一个不同的的角度理解处理器的分段内存访问机制使用循环和条件转移指令来优化主引导扇区代码 点击链接查看上一篇文章:点击链接查看 对于主引导扇区部分。大概前几篇文章已经学的差不…

【OS学习笔记】十一 实模式:中断-软中断和硬中断基本原理

上一篇文章我们模拟操作系统的加载器程序,使用汇编语言实现了一个程序加载器:点击链接查看上一篇文章:程序加载器的实现原理 本篇文章,是实模式学习的结尾。在经过了那么多坎坷,终于学完了8086的实模式!&a…

配置节处理程序时出错,未能加载文件或程序集

安装sql server2008时,出现下面的错误: 按照上面的提示,查看那个路径下的文件,根据文件名判断可能是临时文件,于是首先将上面的文件剪切出来,然后安装,成功。 转载于:https://www.cnblogs.com/x…

【软件开发底层知识修炼】六 Binutils辅助工具之- addr2line与strip工具

学习交流加 个人qq: 1126137994个人微信: liu1126137994学习交流资源分享qq群: 962535112 上一篇文章我们学习了gcc编译器的相关内容。点击查看上一篇文章:gcc编译器。本篇文章接着上一篇文章,学习GNU为GCC提供的辅助开…

Eboot 中给nandflash分区实现

提到分区就不得不提到MBR,不得不提到分区表。 什么是MBR 硬盘的0柱面、0磁头、1扇区称为主引导扇区,NANDFLASH由BLOCK和Sector组成,所以NANDFLASH的第0 BLOCK,第1 Sector为主引导扇区,FDISK程序写到该扇区的内容称为主…

kmp匹配算法

kmp匹配算法1.第一种方式是暴利匹配方式2.第二种方式采用kmp 方式进行匹配3. 相应的代码1.第一种方式是暴利匹配方式 暴利匹配规则 模型: str1 位源字符串下标为i,str2位匹配字符串,下标为j 。 假设 str1 匹配到i , str2 匹配到j 则有 (1)当 …

【软件开发底层知识修炼】七 Binutils辅助工具之- ar工具与nm工具

学习交流加 个人qq: 1126137994个人微信: liu1126137994学习交流资源分享qq群: 962535112 上一篇文章学习addr2line与strip工具。点击链接查看上一篇文章:点击查看 本篇文章学习两个工具:ar与nm工具。 文章目录1、ar工…

【软件开发底层知识修炼】八 Binutils辅助工具之- objdump工具 与 size,strings工具

上一篇文章学习了ar工具与nm工具,点击链接查看上一篇文章:点击链接 本片文章学习记录以下三个工具: objdumpsizestrings 1、objdump工具 用法: 反汇编目标文件,查看汇编到源码的映射(后面代码案例分析看具体区别&a…

【C++深度剖析教程39】实现C++数组类模板

上一篇文章在那个学习了多参数类模板与特化的分析:点击链接查看上一篇文章:类模板深度剖析 本篇文章学习记录: 数值型模板参数实现C数组类模板 1、模板中的数值型参数 模板参数可以是数值型参数。也就是非类型参数。如下图所示&#xff1…

前端学习(168)全局事件属性

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/ TR/html4/strict.dtd"> <html><head><meta http-equiv"content-type" content"text/html; charsetutf-8"><title>事件</ti…

【原】两个时间相加的运算符重载实现

要求&#xff1a;两个时间相加&#xff0c;得到的时间形如“xx时&#xff1a;xx分&#xff1a;xx秒” -------------------------------------------------------------------------------------------------------------- 解答&#xff1a; 首先编写时间处理类 时间类 1 ///&l…

IOT变现

IOT&#xff08;物联网&#xff09;变现1. IOT 设备基础结构2.IOT 组成元素3.从M2M扩展到IOT的世界4. 工业4.0最近在看IOT变现&#xff0c;记录一下核心的知识点概念&#xff1a;IOT 是利用无线标签&#xff0c;传感器&#xff0c;MEMS(micro-ElectroMechanical System&#xf…

【C++深度剖析教程40】使用数值型模板技术计算1+2+3+...+N的值

上一篇文章学习了数值型模板技术&#xff0c;并利用相关技术&#xff0c;实现了C的数组类模板。点击文章查看上一篇文章&#xff1a;点击链接查看 本篇文章&#xff0c;继续利用模板技术来解决一个问题。 如果想求123…N的结果&#xff0c;有很多种方法。可以循环遍历&#x…

前端学习(169):无语义元素

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/ html4/strict.dtd"> <html><head><meta http-equiv"content-type" content"text/html; charsetutf-8"><title>无语义标签&…

dubbo思维导图

dubbo思维导图之前总结的 后续持续更新中

前端学习(170):无语义元素二

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/ html4/strict.dtd"> <html><head><meta http-equiv"content-type" content"text/html; charsetutf-8"><title>DIVCSS布局&…

【软件开发底层知识修炼】九 链接器-可重定位文件与可执行文件

上几篇文章学习了Binutils辅助工具里面的几个实用的工具&#xff0c;那些工具对于以后的学习都是非常有帮助的&#xff0c;尤其是C语、C语言的学习以及调试是非常有帮助的。点击链接查看上一篇文章&#xff1a;点击查看 本篇文章开始一个新的知识的学习&#xff0c;链接器的学习…

【软件开发底层知识修炼】十 链接器-main函数不是第一个被执行的函数

上一篇文章&#xff0c;大概了解了链接器的工作内容就是&#xff1a;符号解析和重定位。点击上一篇文章查看&#xff1a;点击查看。 本片文章其实还是围绕链接器来学习。只不过不是很明显&#xff0c;当你学到下一篇文章时&#xff0c;就明白了。 本篇文章来弄明白一个问题&a…