1.因为用到了调试功能,所以要自己编译安装, 到Bochs官方下载源码包,Bochs 下载地址 。或者到也可以下载得到。(顺便说一句,oldlinux这个网站上有很多有用的资料,这里有很多老版本linux(例如Linux0.11)的资料。)
2.安装G++编译器(这一步应该是必要,但是因为我的系统之前已经安装过了,所以就不用再安装)
sudo
apt-get install g++
如果不安装G++编译器,
在执行configure时就会出现一些错误。
3.ERROR: X windows gui was selected, but X windows libraries were not found.
出现这个错误时,请安装xorg-dev包(说明:我安装时,并没有出现这条错误提示,但是xorg-dev包仍然需要安装,一开始觉得没出现上边提示的错误,所以就没有安装,搞了好久,最后还是安装了才make通过)
sudo apt-get install xorg-dev
4.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
5.执行配置(出错处理如上)
三种情况在这里有所区别,
编译产生不带调试功能的bochs方法是:./configure 直接执行configure不带任何参数
编译带汇编调试和反汇编功能的bochs时: ./configure --enable-debugger --enable-disasm 添加开启调试和反汇编功能选项
编译C语言调试工具的bochs时:./configure --enable-gdbstus 添加GDB通信模块
6.然后运行make(每次configure之后都要进行make)
make
执行make命令之后就生成了相应的bochs程序,在编译完不带调试功能的bochs之后,直接进行下一步install.
编译完带调试功能的bochs之后(包括汇编调试和C语言调试两种),不进行install操作,直接把产生的bochs可执行程序分别重命名为:bochsdbg和bochsgdb然后把他们复制到/usr/local/bin目录下。
7.再install
sudo make install
我试过不用sudo来直接执行,会出错的,出错提示不明确,应该是权限不够
make: *** [install_bin] 错误 1
7.完成,执行bochs,嘻嘻,来个截图
不带调试功能的Bochs:在编译目录之外的地方执行:bochs
带汇编调试功能的Bochs:在内核源代码目录下:bochsdbg -qf bochs.bxrc
带C语言调试功能的Bochs:
这里的bochs配置文件与其他Linux 0.11配置文件的主要区别是在文件头部添加有以下一行内容,表示当bochs使用这个配置文件运行时将在本地网络端口1234上侦听gdb调试器的命令:
gdbstub: enabled=1, port=1234, text_base=0, data_base=0, bss_base=0
运行这个实验的基本步骤如下:
(1).启动X window系统后打开两个终端窗口;
(2).在一个窗口中,把工作目录切换进linux-gdb-rh9/目录中,并运行程序“bochsgdb -qf bochs.bxrc”,此时该窗口中会显示一条等待gdb来连接的信息:“Wait for gdb connection on localhost:1234”,并且系统会创建一个Bochs主窗口(此时无内容);
(3).在另一个窗口中,我们把工作目录切换到内核源代码目录中linux-gdb-rh9/linux/,并运行命令:“gdb tools/system”;
(4).在运行gdb的窗口中键入命令“break main”和“target remote localhost:1234”,此时gdb会显示已经连接到Bochs的信息;
(5).在gdb环境中再执行命令“cont”,稍过一会gdb会显示程序停止在init/main.c的main()函数处。
二、配置Bochs以及实现简单打印功能
安装好bochs之后,我们需要对bochs进行配置,bochs的配置方式就是来修改其配置文件 .bxrc文件。首先说明下,bochs安装之后主要文件的分布情况:/usr/local/bin/ bochs运行主程序(相当于windows中的exe文件)、撤消disk
image的记录日志程序:bxcommit、创建disk/floppy
image的程序:bximage;/usr/local/share/bochs BIOS、VGABIOS以及keymaps 文件夹(暂时不知道作用);/usr/local/share/man帮助文档 /usr/local/share/doc 其他的说明文档(这里边有一份配置文件的模板文件bochsrc-sample.txt)我们可以在其中进行修改。
然后对bochrc进行修改如下:(我的简单的打印字符的配置文件相当简单,只有如下几句话)
注意,#是注释符号!即#之后的语句是无效的,其实#就相当于C+语言中的//
###############################################################
#
Configuration file for
Bochs
###############################################################
#
how much memory the emulated machine will have
megs:
32 #内存容量32MB,也可以选择更小的16MB,8MB等
#
filename of ROM images(BIOS文件镜像指定)
romimage: file=$BXSHARE/BIOS-bochs-latest
#环境变量BXSHARE默认设置为 /usr/local/share/bochs,所以如上的配置相当于下边的注释
#romimage:
file=/usr/local/share/bochs/BIOS-bochs-latest
#显卡镜像文件,如上
vgaromimage:
file=$BXSHARE/VGABIOS-lgpl-latest
#vgaromimage:
/usr/local/share/vgabios/vgabios.bin
# what disk images
will be used(设置boot文件的镜像文件)
floppya:
1_44=a.img, status=inserted
# choose the boot
disk.(说明软盘a是启动引导镜像)
boot:
a
# where do we send log messages?
# log: bochsout.txt
#
disable the mouse
mouse: enabled=0
keyboard_serial_delay:
200
keyboard_paste_delay:
100000
修改好之后,
保存退出!
最后,我们运行bochs
(注意boot镜像文件a.img要与配置文件在同一目录之下,否则就要修改目录了)
bochs
-f bochs0.00.bxrc #以*.bxrc为配置文件启动bochs
OK!!!
ENJOY!
-_-
三、运行中可能出现的问题以及解决方法
问题一、安装bochs在terminal下输入下列代码
sudo
apt-get install bochs
这样安装结束后,在我使用bochs的时候出现了下列错误:
Event
type: PANIC
Device: [ ]
Message:
dlopen failed for module 'x': file not
found
这是由于在安装的时候,少安装了个bochs-x包
这个包可以在.com/dapper/misc/bochs-x找到
也可以在terminal下面输入
sudo
apt-get install bochs-x
这样才算安装完毕了。
问题二、启动问题
点进入系统后控制台出现下面的提示:
Please
choose one: [6] 6
00000000000i[ ] installing win32 module as the
Bochs GUI
00000000000i[ ] using log file
bochsout.txt
========================================================================
Event
type: PANIC
Device: [MEM0 ]
Message: ROM: System BIOS must end
at 0xfffff
A PANIC has occurred. Do you want to:
cont -
continue execution
alwayscont - continue execution, and don't ask
again.
This affects only PANIC events from device [MEM0 ]
die
- stop execution now
abort - dump core
Choose one of the
actions above:
[die]
问题原因:
在2.3.5以前的bochs使用的BIOS-bochs-latest是64k的,那个时候需要加上
romimage:
file=BIOS-bochs-latest,address=0xf0000(举例)
在2.3.5中的BIOS-bochs-latest更新了,变成了128k的,这个时候配置需要改为
romimage:
file=$BXSHARE/BIOS-bochs-latest (举例,也就是要去掉address=0xf000)
解决方法:
去掉配置文件中的address那个
问题三、bochs的启动配置文件bochsrc
一般网上的资料都会提示你安装好后会有如下工具:
/usr/bin/bochs
Bochs启动程序
/usr/bin/bximage
Bochs带的制作磁盘镜像文件的工具
/usr/bin/bxcommit
把redolog放进flat磁盘镜像文件中去的交互工具
/usr/share/doc/bochs/bochsrc-sample.txt
Bochs配置文件的例子
/usr/share/bochs/BIOS-bochs-*
ROM BIOS镜像文件
/usr/share/bochs/VGABIOS-*
与VGA
BIOS镜像文件相关的文件
/usr/bin/bochs-dlx
启动Bochs中DLX
linux的程序
/usr/share/bochs/dlxlinux/
DLX
Linux的目录,包含它的磁盘镜像文件和配置文件
/usr/share/bochs/keymaps/*.map
X11和SDL的keymap列表
其实在终端安装的却没有第四、第七和第八项,就连第二第三项也要另外安装:
sudo apt-get install bximage
sudo apt-get install
bxcommit
所以,网上那些bochsrx在Ubuntu是运行不了的,就因为这点,我搞近一个下午,开始我老以为是配置文件不对呢。
普通的bochsrc:
romimage:
file=$BXSHARE/BIOS-bochs-latest,
vgaromimage:
file=$BXSHARE/VGABIOS-lgpl-latest
但是在Ubuntu下压根就没有VGABIOS-lgpl-latest
例如:
ls
BIOS-bochs-latest BIOS-bochs-legacy
BIOS-qemu-latest
keymaps
后来我才发现,从终端下安装bochs时它把VGA专门作为了一个程序安装在了/usr/share/vgabios/中了。
ls /usr/share/vgabios/
vgabios.bin vgabios.cirrus.bin
vgabios.cirrus.debug.bin
vgabios.debug.bin
这样配置文件就要改为:
romimage: file=$BXSHARE/BIOS-bochs-latest
megs:4
floppya: image=./boot.img,status=inserted
vgaromimage: file=/usr/share/vgabios/vgabios.bin
boot:a
log:out.bochs
问题四:出现“optional plugin 'vga_update_interval' not found”的错误!
解决:因为我只是实现了简单的字符打印功能,并没有进一步的功能,所以关于显卡的神马的都还没有来得及设置呢,而在配置文件中又使用了这样的选项,因此就会出现上述的出错提示。解决方法就是在配置文件中,把vga_update_interval的设置注释掉。重新跑,还会出现类似的错误,一样的解决方法,直到没有错误出现。