前面我们讲解了主引导程序的加载过程,并且制作了虚拟软盘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. 华中农业大学预赛 B Handing Out Candies 余数的和

    Problem B: Handing Out Candies Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 258  Solved: 19[Submit ...

  2. python 多线程队列

    ##Using Queue with multiprocessing – Chapter : Process Based Parallelism import multiprocessing impo ...

  3. resource not found : rosbridge_server

    1.放到src下,改名字为rosbridge_server,编译catkin_make git clone https://github.com/RobotWebTools/rosbridge_sui ...

  4. JSONObject获取的值有时候不是String类型,而有时候又是String类型,怎么办呐

    { "weatherinfo": { "city": "深圳", "cityid": "101280601&q ...

  5. Qt5.3.2(VS2010)_调试_遇到的问题

    1.(20171124)调试程序 的时候,一直卡住,看到 右下角的进度里面,一直是"Launching Debugger"的状态 ZC: 一直找不到 原因... 尝试了 32位/6 ...

  6. URLConnection和HttpClient使用入门

    本讲内容:URLConnection和HttpClient使用入门 在 Android中除了使用WebView控件访问网络以外,还有用代码方式访问网络的方法,代码方式有时候会显得更加灵活.本讲会介绍使 ...

  7. python数据持久存储-pickle模块

    pickle模块实现了基本的数据序列和反序列化.pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,通过pickle模块的反序列化操作,能够从文件中创建上一次程序保存的对象. 接 ...

  8. Python 爬虫-获得大学排名

    2017-07-29 23:20:24 主要技术路线:requests+bs4+格式化输出 import requests from bs4 import BeautifulSoup url = 'h ...

  9. android--------Android Studio常见问题以及解决方式

    gradle build的时候出现的问题: Error:Execution failed for task ':app:packageDebug'. Duplicate files copied in ...

  10. Spring Boot 启动 Struts 报冲突

    错误信息如下: Caused by: com.opensymphony.xwork2.config.ConfigurationException: Bean type class com.opensy ...