Bochs环境搭建

本文介绍了如何搭建和配置Bochs,一个开源的IA-32(x86)PC模拟器,用于学习和调试操作系统。内容涵盖Bochs的基本功能、配置文件设置、创建硬盘镜像以及使用调试工具进行OS调试。

    从事Nand driver的开发已经三个月有余,由于nand是存储数据的载体,涉及它的维护工作不仅仅局限在了nand控制器的读写操作和mtd层,但凡涉及数据读写操作的都会有它的存在。比如系统启动的诸多过程,升级操作,串口通讯工具等等。心血来潮,想追溯到OS物种的起源,逐步来学习计算机的心智——操作系统,并完成自己的一步步实现。小弟初来乍到,有很多的知识和方法,以及思想不够成熟和全面,希望能得到达人们的指导,在此表示由衷的感谢!

就是这样的一个小盒子,从这里获得http://sourceforge.net/projects/bochs/

1.  What is Bochs?

     Bochs是使用C++编写的开源IA-32(x86)PC模拟器,由凯文·劳顿最先编写可用于仿真386、486、Pentium/PentiumII/PentiumIII/Pentium4或x86-64位的CPU,包括可选的MMX,SSEx和3DNow指令环境。与此同时还有辅助Bochs版本>= 2.3.7的GUI调试器peter-bochs-debugger,在这里下载http://code.google.com/p/peter-bochs/

     在windows版本下有个DLX,位于dlxlinux目录下,是微型的Linux demo硬盘镜像,能够跑有限的Linux命令。

2. How to Config?

     安装在windows下的bochs,用bochsrc.bxrc作为配置文件,比如DLX的配置文件是在dlxlinux/bochsrc.bxrc,我们可以类似的去写:

###############################################################
# bochsrc.txt file for DLX Linux disk image.
###############################################################

# how much memory the emulated machine will have
megs: 32                                                                                                                      #内存大小

# filename of ROM images
romimage: file=../BIOS-bochs-latest                                                                            #rom code 即BIOS
vgaromimage: file=../VGABIOS-lgpl-latest                                                                   #VGA BIOS

# what disk images will be used                                                                                   #软盘镜像
floppya: 1_44=floppya.img, status=inserted
floppyb: 1_44=floppyb.img, status=inserted

# hard disk                                                                                                                    #这就是要启动的系统
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
ata0-master: type=disk, path="hd10meg.img", cylinders=306, heads=4, spt=17      

# choose the boot disk.
boot: c

# default config interface is textconfig.
#config_interface: textconfig
#config_interface: wx

#display_library: x
# other choices: win32 sdl wx carbon amigaos beos macintosh nogui rfb term svga

# where do we send log messages?                                                                             #log信息
log: bochsout.txt

# disable the mouse, since DLX is text only                                                                  #不支持鼠标
mouse: enabled=0

# enable key mapping, using US layout as default.
#
# NOTE: In Bochs 1.4, keyboard mapping is only 100% implemented on X windows.
# However, the key mapping tables are used in the paste function, so
# in the DLX Linux example I'm enabling keyboard_mapping so that paste
# will work.  Cut&Paste is currently implemented on win32 and X windows only.

#keyboard_mapping: enabled=1, map=$BXSHARE/keymaps/x11-pc-us.map
#keyboard_mapping: enabled=1, map=$BXSHARE/keymaps/x11-pc-fr.map
#keyboard_mapping: enabled=1, map=$BXSHARE/keymaps/x11-pc-de.map
#keyboard_mapping: enabled=1, map=$BXSHARE/keymaps/x11-pc-es.map

或者参考bochsrc-sample.txt文件。

# MAGIC_BREAK:
# This enables the "magic breakpoint" feature when using the debugger.
# The useless cpu instruction XCHG BX, BX causes Bochs to enter the
# debugger mode. This might be useful for software development.
#
# Example:
#   magic_break: enabled=1
#=======================================================================
#magic_break: enabled=1

这个配置在调试的作用很大,可以在一个专门的位置查看寄存器,能够使bochs进入debug模式:

在gcc上的命令为:__asm__("xchgw %bx. %bx"); /* (this is GAS) */
TC上为:__emit__(0x87,0xDB); /* XCHG BX,BX */

XCHG BX,BX是windows上指令

替代这个命令的方法是在code上插入“hlt”,或者在控制台上Ctrl+C

一般我们用bochs -f bochsrc指定配置文件,如果不指定,则按照下面的方式寻找配置文件:

.bochsrc(隐藏文件)
bochsrc
bochsrc.txt
bochsrc.bxrc(仅对windows有效)

3. Create new image?

(1) 拷贝bochsrc-sample.txt成一个新文件bochsrc.bxrc,配置您需要的配置选项,否则注释掉
(2) 利用bximage.exe应用程序,创建硬盘镜像

(3) 把上面最后提示的写入bochsrc.bxrc文件中
ate0-master: type=disk, path="myfirst.img", mode=flat, cylinders=40, heads=16, spt=63
(4) 这个新建的image是没有format和partition table的,所以需要fdisk和format命令
可以在这里面http://bochs.sourceforge.net/diskimages.html获得a.img为floppy,在这里有需要的dos命令,提供fdisk和format
floppya: 1_44=a.img, status=inserted
注意boot配置:
boot: floppy, disk
(5)Start Bochs  选择Start simulation
首先运行floppy,执行"format c: /s",再boot disk

具体请参见安装目录下Bochs - a Guide and Tutorial for Windows II.pdf,或者在http://code.google.com/p/peter-bochs/下载相关资料

4. Running Bochs?

(1) 可以load您已经配置好的bochsrc.bxrc,可以通过Edit Options去修改您的配置文件的内容,然后start
(2) bochs -q命令显示窗口

5. Debug OS

在安装目录下有一个bochsdbg.exe,能够具有调试OS内核的功能

在PC上,BIOS load boot disk的MBR到内存0x7C00位置,可以执行如下命令进行调试:

行为指令举例说明
在物理地址上设置断点b addrb 0x17300 
在线性地址上设置断点lb addrlb 0x7C00 
在虚拟地址上设置断点vb segment:offsetvb 0x0000:0x7C00CS:IP
显示当前所有断点信息info breakinfo break 
继续执行直到遇上断点cc 
单步执行ss 
单步执行,遇到函数则跳过nn 
查看寄存器信息

info cpu
r
fp
sreg
creg

info cpu
r
fp
sreg
creg

help info
查看堆栈print-stackprint-stack 
查看物理地址内容xp /nuf addrxp /40bx 0x70346help xp
查看线性地址内容x /nuf addrx /40bx 0x346help x
反汇编一段内存u start endu 0x700000 0x 70012D 
反汇编执行的每一条指令trace-ontrace-on 
每执行一条指令就打印CPU信息trace-reg

trace-reg on

 

 

一些简单的解释:

disassemble 0x009880 0x00988f 相当于列表中的u start end

info gdt   查看global descriptor table信息

info idt    查看interrupt descriptor table信息

x /28hx 0x0a436  用28个十六进制字显示

扩展:
(1)Peter-Bochs Debugger 图形化Debug工具http://code.google.com/p/peter-bochs/,使用说明见http://code.google.com/p/peter-bochs/wiki/features
(2)Bochs内置的增强Debug工具,在配置文件上
display_library: x, options="gui_debug" # use GTK debugger gui
display_library: win32, options="gui_debug" # use Win32 debugger gui

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值