前面我们讲解了主引导程序的加载过程,并且制作了虚拟软盘a.img,最终这个主引导程序也在机器中成功运行了,但是实际开发的时候,并不会如此简单,免不了调试过程,如果还像上一节中直接将软盘放到机器中去加载的话是没有办法进行调试的,因此,我们需要一款调试工具bochs,bochs是一款x86模拟器,支持断点调试,为我们开发操作系统带来了方便。

  bochs的安装:

  可以选择源码安装,也可以选择apt-get安装,源码安装时,我们需要下载源码包并放置到我们的工作目录下,解压缩并进入到源码目录下,然后进行配置操作,下面的配置是开启调试和反汇编功能,如下所示:

我们使用的版本是bochs-2.4.5,配置完成后,然后进行make,如下:

  执行完make编译后就是安装过程,我们只需执行sudo make install即可,如果一切顺利的话,上面三步很快就会完成,安装也随之完成。

  但是,现实往往是悲催的,安装过程会报各种错误,本文不在详细展示错误的情况,只给出一些有限的解决方法。

  1、配置中如果出现错误,可能是缺少g++编译器,可用sudo apt-get install g++安装即可。

  2、缺少x-window,例如:ERROR: X windows gui was selected, but X windows libraries were not found

    可使用sudo apt-get install xorg-dev安装xorg-dev包。

  3、缺少gtk库   

    Package gtk+-2.0 was not found in the pkg-config search path.Perhaps you should add the directory containing `gtk+-2.0.pc'to the PKG_CONFIG_PATH   environment variableNo package 'gtk+-2.0' foundERROR: pkg-config was not found, or unable to access the gtk+-2.0 package.Install pkg-config and the gtk+   development package,or disable the gui debugger, or the wxWidgets display library (whichever is being used).

  可以使用sudo apt-get install libgtk2.0-dev来安装相应的库即可。

  4、bochs启动时崩溃,显示panic错误,可尝试使用sudo apt-get install bochs-x解决。

  其他的错误信息可以自行搜索解决。

  bochs安装完成后,还需要安装vgabios,执行sudo apt-get install vagbios即可。下面就进入bochs真正的配置。

  bochs启动时可以显示的使用bochs -f bochsrc_file,如果不加启动文件的话会自动在当前目录下一依次寻找.bochsrc,bochsrc,bochsrc.txt,首先找到的即被当做启动文件。bochs的启动文件大致如下:

  9,10,13,25是我们重点关注的行,13行的a.img即为当前目录下的虚拟软盘文件的名字,9行的romimage是bochs安装目录下的一个文件,10行的vgaromimage是vgabios安装目录下的文件,我们首先要确定bochs和vgabios的安装目录,使用如下命令:

  which bochs

  whereis vgabios

which是查看可执行文件的位置,whereis是查看文件或者目录的位置,whereis有很多选项,可以进行特定格式的文件查找。

执行结果如下:

  第9行romimage和第25行map的填写请注意,which bochs只能确定bochs的安装路径,以上两项的填写需要在上述路径下相应的切换一下文件夹。

  我们上一节已经有了a.img,现在配置文件也有了,我们直接启动bochs,启动界面如下:

  输入6,开始仿真,进行到如下界面:

  输入continue,回车,结果如下:

  上图和我们在VmWare模拟的物理机器上执行的结果一致。

  bochs还支持断点调试,例如,刚启动时,我们不输入continue,而是先设置一个断点,即break 0x7c00,然后再执行continue,如下所示:

  

  执行continue后,程序停在了7c00断点处,如下所示:

  bochs还有很多其他强大的功能,命令也和gdb很相似,我们在本文不再进行介绍,下面给出一些常用的调试命令:

  至此,我们搭建好了最基本的os调试环境。

第三课 操作系统开发之x86模拟环境搭建的更多相关文章

  1. Android开发之旅:环境搭建及HelloWorld

    引言 本系列适合0基础的人员,因为我就是从0开始的,此系列记录我步入Android开发的一些经验分享,望与君共勉!作为Android队伍中的一个新人的我,如果有什么不对的地方,还望不吝赐教. 在开始A ...

  2. Android开发环境搭建以及模拟环境搭建

    Android开发环境 现在主流的Android开发环境有: Eclipse + ADT + SDK Android Studio + SDK IntelliJ IDEA + SDK 现在国内大部分开 ...

  3. 转:Android开发之旅:环境搭建及HelloWorld

    http://www.cnblogs.com/skynet/archive/2010/04/12/1709892.html 引言 本系列适合0基础的人员,因为我就是从0开始的,此系列记录我步入Andr ...

  4. 【转】Android开发之旅:环境搭建及HelloWorld

    原文网址: http://www.cnblogs.com/skynet/archive/2010/04/12/1709892.html 引言 本系列适合0基础的人员,因为我就是从0开始的,此系列记录我 ...

  5. Android开发之旅:环境搭建及HelloWorld(转)

    本系列适合0基础的人员,因为我就是从0开始的,此系列记录我步入Android开发的一些经验分享,望与君共勉!作为Android队伍中的一个新人的我,如果有什么不对的地方,还望不吝赐教. 在开始Andr ...

  6. windows Objective-C模拟环境搭建

    安装GNUstep GNUstep Windows Installer提供了Windows平台下的Objective-C的模拟开发环境,一共有四个软件包,其中GNUstep System和GNUste ...

  7. Cocos2d-X游戏开发之Windows7+VS2010环境搭建(亲测)

    Cocos2d—X游戏引擎,提供Mac系统下的Xcode开发和Windows系统的VS开发,应该是比较常用的2种. 使用Mac以后,就会发现使用Xcode开发实在是福分啊.VS开发步骤繁琐,调试效率低 ...

  8. PPPOE 模拟环境搭建

    这段时间.包含我自己測试OTT盒子 PPPOE的时候比較痛苦.要不就是在别人的位置上測试.要不就是借用PPPOE的设备,认为还是自己搭建一个PPPOE真实拨号上网的环境多好! 可是坑爹的win7找不到 ...

  9. 第一课:Hadoop集群环境搭建

    一. 检查列表 1.1.网络访问 设置电脑IP以及可以访问网络设置:进入etc/sysconfig/network-scripts/,使用命令"ls -all" 查看文件.会看到i ...

随机推荐

  1. WPF基础学习笔记整理 (二) XAML

    基础知识: XAML:Extensible Application Markup Language, zammel: 用于实例化.NET对象的标记语言: XMAL使用树形逻辑结构描述UI: BAML: ...

  2. Cocos2d-x学习笔记(十)CC_CALLBACK回调函数相关宏

    这里加入一个插曲,是关于Cocos2d-x回调函数的.首先,让我们Cocos支持的回调函数宏有哪些,以及其原型: // new callbacks based on C++11 #define CC_ ...

  3. python 判断一个数字是否为3的幂

    def is_Power_of_three(n): == ): n /= ; ; print(is_Power_of_three()) print(is_Power_of_three()) print ...

  4. asp.net Core MVC + webpack 笔记

    webpack 是一个打包工具,用在asp.net Core MVC 会觉得有必要吗? MVC 本身就有bundler~ 如果用过webpack就会知道,打包出来的效果结果就是不一样,MVC的打包就是 ...

  5. Lua面向对象 --- 多态

    多态,简单的理解就是事物的多种形态.专业的术语说就是:同一个实现接口,使用不同的实例而执行不同的操作. 工程结构: BaseRoom.lua: BaseRoom = {} function BaseR ...

  6. 查找并替换字符串 Find And Replace in String

    2018-07-29 17:08:15 问题描述: 问题求解: 字符串替换的问题有个技巧就是从右向左进行替换,这样的话,左边的index就不需要考虑变动了. public String findRep ...

  7. 二叉树最大宽度 Maximum Width of Binary Tree

    2018-07-27 15:55:13 问题描述: 问题求解: 题目中说明了最后的宽度计算其实是按照满二叉树来进行计算的,也就是说如果我们能够得到每层最左边的节点编号和最右边的节点编号,那么本题就可以 ...

  8. 雷林鹏分享:Ruby 安装 - Windows

    Ruby 安装 - Windows 下面列出了在 Windows 机器上安装 Ruby 的步骤. 注意:在安装时,您可能有不同的可用版本. 下载最新版的 Ruby 压缩文件.请点击这里下载. 下载 R ...

  9. [Java学习] Java instanceof 运算符

    多态性带来了一个问题,就是如何判断一个变量所实际引用的对象的类型 . C++使用runtime-type information(RTTI),Java 使用 instanceof 操作符. insta ...

  10. 49 BOM 和DOM

    一.BOM window 对象  1.确认,输入,    window.alert(123) // 弹框    let ret = window.confirm("是否删除") / ...