第三课 操作系统开发之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 ...
随机推荐
- shell case语句
case 格式 case 值 in 模式1) command1 command2 ... commandN ;; 模式2) command1 command2 ... commandN ;; esac ...
- [源][osg][osgBullet]osgBullet例子介绍
1.BasicDemo 基本样例 一个小玩具飞机坠落,一个立方体盒子在转圈 2.centerofmass 质心 3.collision 碰撞检测 这里有一个大神自己改的例子: http://blog. ...
- 【Robot Framework 项目实战 01】使用 RequestsLibrary 进行接口测试
写在前面 本文我们一起来学习如何使用Robot Framework 的RequestsLibrary库,涉及POST.GET接口测试,RF用例分层封装设计等内容. 接口 接口测试是我们最常见的测试类型 ...
- MyEclipse快捷键大全【转】
-------------------------------------MyEclipse 快捷键1(CTRL)-------------------------------------Ctrl+1 ...
- RabbitMQ入门_15_访问控制
参考资料:https://www.rabbitmq.com/access-control.html A. 核心概念 Virtual Host:虚拟主机为 RabbitMQ 中的资源提供了逻辑分组与隔离 ...
- Maven置标签<scope>
在POM 4中,<dependency>中引入了<scope>,它主要管理依赖的部署.目前<scope>可以使用5个值: * compile,缺省值,适用于所有阶段 ...
- 算法笔记--STL中的各种遍历及查找(待增)
算法笔记 map: map<string,int> m; map<string,int>::iterator it;//auto it it = m.begin(); whil ...
- Unity中的文件
Unity中的文件大致分为一下几类: 1.资源文件: 导入后,除非是修改,否则不会变化的文件.例如:fbx文件.贴图文件.音频文件.视频文件.动画文件等. 这些文件在导入到Unity的时候,都会进行转 ...
- SqlServer和Oracle判断表和列是否存在
SqlServer .判断表Users是否存在 if object_id(N'Users',N'U') is not null print '存在' else print '不存在' .判断表User ...
- C/C++中的实参和形参,重点以及盲点,自己以前未知的
C/C++中的实参和形参 今天突然看到一道关于形参和实参的题,我居然不求甚解.藐视过去在我的脑海里只有一个参数的概念,对于形参和实参的区别还真的不知道,作为学习了几年C++的人来说,真的深深感觉对 ...