第三课 操作系统开发之x86模拟环境搭建
前面我们讲解了主引导程序的加载过程,并且制作了虚拟软盘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模拟环境搭建的更多相关文章
- Android开发之旅:环境搭建及HelloWorld
引言 本系列适合0基础的人员,因为我就是从0开始的,此系列记录我步入Android开发的一些经验分享,望与君共勉!作为Android队伍中的一个新人的我,如果有什么不对的地方,还望不吝赐教. 在开始A ...
- Android开发环境搭建以及模拟环境搭建
Android开发环境 现在主流的Android开发环境有: Eclipse + ADT + SDK Android Studio + SDK IntelliJ IDEA + SDK 现在国内大部分开 ...
- 转:Android开发之旅:环境搭建及HelloWorld
http://www.cnblogs.com/skynet/archive/2010/04/12/1709892.html 引言 本系列适合0基础的人员,因为我就是从0开始的,此系列记录我步入Andr ...
- 【转】Android开发之旅:环境搭建及HelloWorld
原文网址: http://www.cnblogs.com/skynet/archive/2010/04/12/1709892.html 引言 本系列适合0基础的人员,因为我就是从0开始的,此系列记录我 ...
- Android开发之旅:环境搭建及HelloWorld(转)
本系列适合0基础的人员,因为我就是从0开始的,此系列记录我步入Android开发的一些经验分享,望与君共勉!作为Android队伍中的一个新人的我,如果有什么不对的地方,还望不吝赐教. 在开始Andr ...
- windows Objective-C模拟环境搭建
安装GNUstep GNUstep Windows Installer提供了Windows平台下的Objective-C的模拟开发环境,一共有四个软件包,其中GNUstep System和GNUste ...
- Cocos2d-X游戏开发之Windows7+VS2010环境搭建(亲测)
Cocos2d—X游戏引擎,提供Mac系统下的Xcode开发和Windows系统的VS开发,应该是比较常用的2种. 使用Mac以后,就会发现使用Xcode开发实在是福分啊.VS开发步骤繁琐,调试效率低 ...
- PPPOE 模拟环境搭建
这段时间.包含我自己測试OTT盒子 PPPOE的时候比較痛苦.要不就是在别人的位置上測试.要不就是借用PPPOE的设备,认为还是自己搭建一个PPPOE真实拨号上网的环境多好! 可是坑爹的win7找不到 ...
- 第一课:Hadoop集群环境搭建
一. 检查列表 1.1.网络访问 设置电脑IP以及可以访问网络设置:进入etc/sysconfig/network-scripts/,使用命令"ls -all" 查看文件.会看到i ...
随机推荐
- codevs 1082 线段树练习 3 区间更新+延迟标记
题目描述 Description 给你N个数,有两种操作: 1:给区间[a,b]的所有数增加X 2:询问区间[a,b]的数的和. 输入描述 Input Description 第一行一个正整数n,接下 ...
- PHP获取固定概率
public static function getFixRand($weight) { if ((int)$weight < 0 || (int)$weight > 100) { ret ...
- [tixml]保存,读取
保存: //xml的实体 TiXmlElement* rootElement = new TiXmlElement("spark"); rootElement->SetAtt ...
- input 输入框只能输入纯数字
1.onkeyup = "value=value.replace(/[^\d]/g,'')" 使用 onkeyup 事件,有 bug ,那就是在中文输入法状态下,输入汉字之后直接回 ...
- LRU缓存淘汰算法
什么是LRU算法? LRU是Least Recently Used的缩写,即最近最少使用,在有限的内容块中存储最近使用次数最多的数据,当内容块已满时,把最少使用的数据删除以便存储新的内容.
- Codeforces 768B - Code For 1(分治思想)
768B - Code For 1 思路:类似于线段树的区间查询. 代码: #include<bits/stdc++.h> using namespace std; #define ll ...
- 终于用ADB连上平板了
可以看到设备管理器里, ADB Interface 设备装不上驱动. 1,百度到的内容,没有一个靠谱的. 2,google到内容了, 却因为看的不仔细,浪费了好多时间...(android自己的文章都 ...
- 雷林鹏分享:C# 不安全代码
C# 不安全代码 当一个代码块使用 unsafe 修饰符标记时,C# 允许在函数中使用指针变量.不安全代码或非托管代码是指使用了指针变量的代码块. 指针变量 指针 是值为另一个变量的地址的变量,即,内 ...
- C# 中的集合(Array/ArrayList/List<T>/HashTable/Dictionary)
int [] numbers = new int[5]; // 长度为5,元素类型为 int. string[,] names = new string[5,4]; // 5*4 的二维数组 byte ...
- 12月8日 周五 image_tag.
Overview of helpers provided by Action View 6.1 AssetTagHelper:用于generate html语言 image_tag ,return a ...