bochs使用心得

http://blog.csdn.net/snowwalf/article/details/6451970


先看下bochs的简介吧,百度的:

Bochs是一个x86硬件平台的开源模拟器。它可以模拟各种硬件的配置。Bochs模拟的是整个PC平台,包括I/O设备、内存和BIOS。更为有趣的是,甚至可以不使用PC硬件来运行Bochs。事实上,它可以在任何编译运行Bochs的平台上模拟x86硬件。通过改变配置,可以指定使用的CPU(386、486或者586),以及内存大小等。一句话,Bochs是电脑里的“PC”。根据需要,Bochs还可以模拟多台PC,此外,它甚至还有自己的电源按钮。

 

用下来感觉bochs非常小巧,相比于VM功能上并不相差很多,而且对于一些比较“古董”的硬件接口支持比较好,通过.bxrc文件能够很方便的生产和配置硬件。bochs内嵌的调试器比较好用,可以从虚拟机通电加载ROM BIOS起开始调试,对于了解操作系统的详细原理还是很有帮助的。就是没有图形化得调试界面比较蛋疼。。。用惯了VS,Windbg的人有点压力大。。。不过慢慢用就习惯了。

 

可以去Sourceforge上下载src或者bin: http://bochs.sourceforge.net/  (linux上建议还是从src开始编译,bin版本中往往不带有bochsdbg这个调试程序。。。windows的话可以直接用.exe的,安装完后是包含dbg程序的,所以我还是用的windows版^_^)

也可以去oldlinux上下载: http://oldlinux.org/Linux.old/bochs/

赵炯老师的书上建议调试Linux0.12使用的是bochs2.3.6,但经我实测发现最新的版本(现在是2.4.6)也是也是兼容的,而且2.4.6的调试指令相比老版本有不少的改进,所以还是建议使用最新的版本。

 

安装和配置比较简单,windows的话只要下一步就OK;

linux上编译src需要在编译时设置编译选项:

 ./configure --prefix=/opt/bochs/debug --enable-plugins --enable-debugger --enable-        disasm
        注释:
              * --prefix=/opt/bochs/debug 软件将被安装到哪个目录下
              * --enable-plugins 是必须要的
              * --enable-debugger 是打开bochs的自带调试器
              * --enbale-disasm 允许反汇编

另外linux上支持bochs内联使用gdb的调试器,具体编译方法还没用尝试过,待更新。。。
再来些bochsdbg的调试指令吧,网上搜的有些指令因为版本问题并不能使用(我用的是2.4.6):

b addr 在物理地址处设置断点 addr为物理内存地址,不加段基址

 

lb 在线性地址处设置断点  addr为线性物理地址,不加基址

 

vb 在虚拟地址上设置断点 addr为段基址:偏移地址, cs段

 

c 继续执行知道遇到断点

 

n 单步执行 跳过子程序和int中断程序

 

s 单步执行

 

s num ( s指令后加一数字) 执行n步

 

dump_cpu 查看寄存器信息  (实测下来这个指令好像不好使。。。)

 

x /nuf addr 显示指定内存地址的数据,addr可以是线性的内存地址,也可以是虚址 格式是基址:偏移或者基址寄存器:偏移

n 显示的数据长度 

u 数据单元大小 b,h,w,g分别对应1,2,4,8字节

f 数据显示格式 x,d,u,o,t,c分别对应十六进制、十进制、无符号十进制、八进制、二进制、字符串

 

 

u [/count] start end 反汇编一段线性内存(作用与上面的一样)

(count 参数指明要反汇编的指令条数 ,例子:u /5 --反汇编从当前地址开始的5条指令)

 

info指令组

info b 展示当前的断点状态信息

info dirty 展示自从上次显示以来物理内存中的脏页(被写的页)

info program 展示程序的执行状态  (无法使用!)

info r|reg|rigisters 展示寄存器内容

info cpu 展示CPU寄存器内容

info fpu 展示FPU寄存器的状态

info idt 展示中断描述表

info ivt 展示中断向量表(保护模式下无效)

info gdt 展示全局描述表

info tss 展示当前的任务状态段

info cr 展示CR0-CR4寄存器状态 (无法使用)

info flags 展示标志寄存器   (无法使用)

 

寄存器查询

r 查看通用寄存器

sreg 查看段寄存器(es,cs,gs,ss,fs,ds以及idt,gdt,ldt,tr)

creg 查看控制寄存器(cr0,cr1,cr2,cr3)

dreg 查看调试寄存器(dr0-dr7)

这里再插一句,标志寄存器的查看方法:

eflags 0x00000002: id vip vif ac vm rf nt IOPL=0 of df if tf sf zf af pf cf    (均为置位)

eflags 0x00000046: id vip vif ac vm rf nt IOPL=0 of df if tf sf ZF af PF cf (ZF,PF置位)

0x00000002是标志寄存器的实际数值,后面的zf,sf等为标志位,小写时标志位未置位,大写为已置位。(刚刚用bochs时为这个问题费解了好久。。。)

 

 

关于在linux0.12系统上编译0.12内核:

从前文下载的根文件系统rootimage-0.12上已经包含了0.12内核的源码,位于/usr/src/linux。使用make命令编译源码,生成引导区启动镜像文件Image。通过命令dd bs=8192 if=Image of=/dev/fd0 将生成的镜像输出到虚拟软盘文件bootimage-0.12-hd上(记得先备份一个啊!),再次启动bochs,即可由新的镜像引导启动了。

 

后续内容请待续。。。


Ubuntu 10.10下Bochs的安装及问题解决

[日期:2011-02-11]    来源:Ubuntu社区   作者:EricChan

 
http://www.linuxidc.com/Linux/2011-02/32167.htm

要在Linux(Ubuntu 10.10)搭建环境来进行简单操作系统编写基本会用到以下几个东西:

nasm汇编代码编译器,

虚拟机Bochs,

编辑器(系统已自带vim),

检查依赖关系、编译生成结果代码的Make(系统自带有),

C代码编译器gcc(系统自带有)。

所以这个环境的搭建主要就差安装nasm和虚拟机了。

nasm可以用sudo apt-get install nasm很方便地安装,至于虚拟机Bochs,当然也可通过apt-get安装,只是这样的话会按默认的配置安装,《一个操作系统的实现》一书说的可能没有调试功能,所以还是决定去www.linuxidc.com官网下源码来编译安装。

如果顺利的话,所有过程如下:

1、下载bochs源码,下的是2.4.5版本

2、解压源码压缩包:tar vxzf bochs-2.4.5.tar.gz

3、进入bochs的解压目录bochs-2.4.5:cd bochs-2.3.5

4、配置,使能调试和反汇编功能:./configure --enable-debugger --enable-disasm

5、编译:make

6、安装:sudo make install

我说“如果顺利的话”,说明我不顺利,原因可能是不同版本的Linux程序包有所缺少,以下是问题及解决:

问题1:./configure后出现Error: C++ preprocessor “/lib/cpp” fails sanity 。

问题在于c++编译器的相关的包没有安装,试了N多命令下载包都不行,都找不到这些package。最后装g++ gdb这个包才貌似解决了,

sudo apt-get install g++ gdb,然而。。。

问题2:执行./configure后又出现ERROR: X windows gui was selected, but X windows libraries were not found.

又是缺包,网上搜得这个包xorg-dev,于是sudo apt-get install xorg-dev(网上有说必须用sudo aptitude install xorg-dev才行,我刚好相反,用这个命令不行,先不管了,赶紧把环境搭建起来才正事,过后再研究。)。还没完呢。。。

问题3:再次执行./configure后又出现新的

ERROR: 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。

之后再编译安装一次./configure>make>sudo make install,就一路顺风了,这样七七八八、效率低下的基本上算装好了。

PS:接下来碰到了一个非常愚蠢的问题:

执行dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc,老是提示boot.bin文件不存在,心想既然缺了,不管里面需要什么内容,先创建个空白的文件来保证虚拟光盘制作的顺利进行,但又不清楚能否像创建其他普通二进制文件那样,用例如touch之类命令来创建,对boot.bin文件不了解,于是先查了boot.bin文件的相关资料,无果,又拼命检查bochs安装时是否所哪个配置歌者依赖的包,一无所获,加上这几天有事,搁置了。

。。。。。。

等到今天,翻书翻到前面,原来boot.bin文件需要先写个asm文件再汇编出来的,哇了个去!挡住去路的,往往不是参天大树,而是小藤,还有盲目!探索阶段,尽量按步就班来,少跳着走,当然这个过程还会发现自己很多Linux环境例如Vim这编辑器还远远没熟练掌握,在写boot.asm(或者说是Copy源码到asm文件中)都还是出现问题无法汇编。。。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Bochs是一个用于模拟x86计算机的开源软件,其使用手册详细介绍了Bochs使用方法和功能。 Bochs使用手册首先介绍了如何在不同操作系统上安装和配置Bochs。针对不同操作系统,手册提供了相应的安装步骤和配置参数,让用户可以快速上手。 手册接着介绍了Bochs模拟器的配置文件,这个文件包含了模拟器运行时的各种设置,如内存大小、硬盘映像文件、网络配置等。手册提供了详细的配置项说明,让用户了解并能自己根据需求进行配置。 手册的下一部分是关于Bochs的调试功能的介绍。调试是Bochs的一个重要特性,它可以帮助用户定位和修复代码中的问题。手册详细解释了调试器的使用方法,包括设置断点、单步执行、查看寄存器和内存等。通过调试功能,用户可以更好地理解代码的执行过程,并找到bug的所在。 在手册的后续部分,会介绍如何使用Bochs加载和运行操作系统。手册详细说明了如何创建一个合适的硬盘映像文件,以及如何将操作系统的安装介质加载到Bochs中进行安装和运行。用户可以按照手册的指导,成功地在Bochs中运行自己的操作系统。 最后,手册还提供了一些有关Bochs其他特性的简要说明。这些特性包括网络模拟、音频模拟和外设模拟等。用户可以根据需要选择性地了解和使用这些特性。 总之,Bochs使用手册详细地介绍了Bochs的各种功能和使用方法。通过阅读手册,用户可以了解如何安装和配置Bochs使用其调试功能,加载和运行操作系统,并了解其他特性。对于想要学习和使用Bochs的人来说,这本手册将是一个宝贵的参考资料。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值