如何在Linux上使用Bochs

如何在Linux上使用Bochs,第1张

安装

到Bochs的主页: 上下载最新的Bochs RPM安装包。 以root的身份安装:

#rpm -ivh bochs-2.2.1-1.i586.rpm

其实RPM安装包给你装上了四个新程序:bochs,bochs-dlx,bximage,bxcommit, 以及相关文档。安装完毕后,你可以先试试bochs-dlx,它是DLX Linux的一个demo。

$ bochs-dlx

---------------------------------------------------------------

DLX Linux Demo, for Bochs x86 Emulator

---------------------------------------------------------------

Checking for bochs binary...ok

Checking for DLX linux directory...ok

Checking for /usr/bin/gzip...ok

Checking for /home/wangcong/.bochsdlx directory...ok

Entering /home/wangcong/.bochsdlx

Running bochs

00000000000i[APIC?] local apic in initializing

========================================================================

Bochs x86 Emulator 2.2.1

Build from CVS snapshot on July 8, 2005

========================================================================

00000000000i[ ] LTDL_LIBRARY_PATH not set. using compile time default '/usr/lib/bochs/plugins'

00000000000i[ ] BXSHARE not set. using compile time default '/usr/share/bochs'

00000000000i[ ] reading configuration from bochsrc.txt

00000000000i[ ] lt_dlhandle is 0x8bac490

00000000000i[PLGIN] loaded plugin libbx_x.la

00000000000i[ ] installing x module as the Bochs GUI

00000000000i[ ] using log file bochsout.txt

马上,你就会看到一个X11窗口。

显示的是VGA BIOS信息,然后是加载Linux的信息。以root身份登录,试试DLX Linux。安装成功。

使用

下面是一些重要的文件:

/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列表

命令bohcs可以接受4个参数:-q 加载配置文件后跳过开始菜单;-f configfile 识别指定的配制文件;-n

不加载配置文件;-h 打印帮助信息;-qf configfile

相当于同时使用-q和-f两个选项。使用Bochs,你必须有一个配置文件,或者你通

过-f参数指定,或者让Bochs自己搜索。配置文件的作用是告诉Bochs到哪里寻找镜像 文件,模拟层如何工作等。Bochs搜索配置文件的顺序是:

.bochsrc 在当前目录中</TT CLASS="FILENAME">

bochsrc 在当前目录中

bochsrc.txt 在当前目录中</TT CLASS="FILENAME">

.bochsrc 在用户的主目录中

bochsrc 在 /etc 目录中

以dlx-linux的配置文件为例,讲一下如何定制你需要的配置文件。dlx-linux的 配置文件是/usr/share/doc/bochs目录中的bochsrc-sample.txt。它的内容 如下:

###############################################################

# bochsrc.txt file for DLX Linux disk image.

###############################################################

# how much memory the emulated machine will have

megs: 32

# filename of ROM images

romimage: file=$BXSHARE/BIOS-bochs-latest, address=0xf0000

vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest

# 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: 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

以#开头的每一行都是注释。注释写得很明白。

megs: 32

指明想要模拟32M的内存。注意:后面的数字最大为2048,但是因为主机系统的限制,在 大多数系统上,Bochs甚至不能支持1024M。

romimage: file=$BXSHARE/BIOS-bochs-latest, address=0xf0000

指明ROM的镜像文件在哪,开机时ROM BIOS被加载到哪里。$BXSHARE是环境变量,指明 Bochs的share目录,在Linux上为/usr/share/bochs。这一般不用改动。下面的vgaromimage 指明VGA ROM的镜像文件位置。

floppya: 1_44=floppya.img, status=inserted

floppyb: 1_44=floppyb.img, status=inserted

floppya是第一软驱,floppyb是第二软驱。后面标明的是软驱镜像文件的位置,软盘 是否插入。可以根据你的需要做适当的修改。

ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14

ata0-master: type=disk, path="hd10meg.img", cylinders=306, heads=4, spt=17

开ata0通道,另外还有ata1,ata2,ata3。对于每一个通道,都必须指明两个IO地址和IRQ。

ata0是默认被打开的,它的ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14。ata0-master

是主ata0通道,后面指明它附带的设备是硬盘,硬盘镜像文件路径,硬盘柱面数,磁头数等参数。

boot: c

指明启动次序,可以是cdrom,floppy,disk。不过由于历史的原因a和c也能被接受。 也可以这样来写:

boot: cdrom, floppy, disk

mouse: enabled=0

指明鼠标是否可见。

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

打开对虚拟US键盘的重映射,keymap必须被指明。

更多的配置文件选项说明见/usr/share/doc/bochs/user/bochsrc.html。 如何编写键盘的keymap列表见/usr/share/doc/bochs/user/keymap.html。

制作磁盘镜像

bximage是Bochs自带的制作磁盘镜像的工具,具有 良好的交互性,使用很方便。运行bximage,你会看到:

========================================================================

bximage

Disk Image Creation Tool for Bochs

$Id: bximage.c,v 1.25.2.1 2005/07/06 20:40:00 vruppert Exp $

========================================================================

Do you want to create a floppy disk image or a hard disk image?

Please type hd or fd. [hd]

询问我们是建立一个软盘镜像还是硬盘镜像,默认的是硬盘。我们直接按回车,选择硬盘 镜像。

What kind of image should I create?

Please type flat, sparse or growing. [flat]

我们想建立一个简单的镜像,选择默认的flat。回车。

Enter the hard disk size in megabytes, between 1 and 32255

[10]

想要多少Mbyte的大小?键入你想要的大小。

I will create a 'flat' hard disk image with

cyl=2

heads=16

sectors per track=63

total sectors=2016

total size=0.98 megabytes

What should I name the image?

[c.img]

在上一步中输入“1”后,显示相关的硬盘信息。询问想要什么镜像文件名字?默认的是 c.img。输入hd.img回车。

Writing: [] Done.

I wrote 1032192 bytes to hd.img.

The following line should appear in your bochsrc:

ata0-master: type=disk, path="hd.img", mode=flat, cylinders=2, heads=16, spt=63

建立完毕。然后你就可以使用这个镜像,用Bochs做实验了。

1. 构造调试环境

由于bochs内建调试功能, 且支持gdb, 用它调试内核会很方便.

(文章中大部分命令的运行需要root权限,以sudo方式运行)

1.1 构建磁盘镜像

Shell代码

dd if=/dev/zero of=hd0.img

count=$((63*16*100))

用这个命令可以构建一个50MB左右的磁盘镜像, 输出结果如下:

100800+0 records in

100800+0 records out

51609600 bytes (52 MB) copied, 0.734578 s, 70.3

MB/s

注意count必须为63*16的倍数, 否则bochs识别硬盘会有问题.

1.2 挂载磁盘镜像

Shell代码

losetup /dev/loop0 hd0.img

这个命令可以将文件绑定到一个loop设备. 如果/dev/loop0不存在, 可以尝试 modprobe

loop.

然后进行设备初始化:

Shell代码

cfdisk -s63 -h16/dev/loop0

只创建一个主分区就可以. 写入后, 用命令fdisk检查结果:

Shell代码

fdisk -lu /dev/loop0

Disk /dev/loop0: 51 MB, 51609600 bytes

16 heads, 63 sectors/track, 100 cylinders, total 100800

sectors

Units = sectors of 1 * 512 = 512 bytes

Disk identifier: 0x00000000

Device Boot Start End Blocks Id System

/dev/loop0p1 63 100799 50368+ 83 Linux

将分区1挂载到/dev/loop1.

Shell代码

losetup /dev/loop1 hd0.img -o

$((63*512))

格式化/dev/loop1为ext3格式.

Shell代码

mkfs.ext3 /dev/loop1

在mnt下创建img目录, 做以后维护用.

Shell代码

mkdir -p /mnt/img

将loop1挂载到/mnt/img

Shell代码

mount /dev/loop1 /mnt/img/

安装引导程序. 因为我狂热倾向于模块化架构, 所以选择GRUB2.

要下载的软件包:

bochs-2.6.2

linux-0.11-081030.tar.gz

linux-0.11-devel-060625.zip(hdc-0.11-new.img 文件系统)

(hdc-0.11-new.img 只用这一个文件也可以时入linux 0.11系统,只需在配置bochs时稍做修改就可以,但是要调试源码的话,还是自己编译来得爽)

安装bochs之前做一些准备工作

sudo apt-get install build-essential

sudo apt-get install xorg-dev

sudo apt-get install libgtk2.0-dev

sudo apt-get install bison

一.安装bochs

1. 解包

tar xvfz bochs-2.6.2.tar.gz

2.进入bochs-2.6.2目录

cd bochs-2.6.2

3. 配置

编译两份不同的配置的版本

第一个的版本为使用bochs自带的内部调试器

./configure --prefix=/opt/bochs/debug --enable-plugins --enable-debugger --enable-disasm

注释:

* --prefix=/opt/bochs/debug 软件将被安装到哪个目录下

* --enable-plugins 是必须要的

* --enable-debugger 是打开bochs的自带调试器

* --enbale-disasm 允许反汇编

4. 编译

make

报错:

/usr/bin/ld: gui/libgui.a(gtk_enh_dbg_osdep.o): undefined reference to symbol 'pthread_create@@GLIBC_2.1'

//lib/i386-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command line

collect2: error: ld returned 1 exit status

make: *** [bochs] Error 1

解决方法:修改步骤3产生的bochs-2.6.2/Makefile文件中LIBS 一行,加上 -lpthread,然后再make

5. 安装

sudo make install

报错:libtool: install: `iodev/usb/*.la' is not a valid libtool archive

Try `libtool --help --mode=install' for more information.

make: *** [install_libtool_plugins] Error 1

解决方法一:在bochs-2.6.2/iodev/usb目录下,修改Makefile和Makefile.in中的OBJS_THAT_CAN_BE_PLUGINS加入一个usb_common.o即可。

解决方法二:./configure --prefix=/opt/bochs/gdbstub --enable-plugins --enable-disasm --enable-gdb-stub --enable-usb

6.加一个符号连接

sudo ln -s /opt/bochs/debug/bin/bochs /usr/bin/bochsdbg

第二个版本为使用gdb-stub的版本

1. 清理

在配置第二个版本之前,需要把刚才编译的东西清理掉,输入以下命令:

make clean

2. 配置

然后配置,配置命令为

./configure --prefix=/opt/bochs/gdbstub --enable-plugins --enable-disasm --enable-gdb-stub

配置注释:

* --enable-gdb-stub 打开gdb stub支持

* 其他选项同上,注意这个不同版本会安装到不同的目录下。

3. 编译

make

4. 安装

sudo make install

这样bochs使用外部调试器gdb的版本就编译好了。

5.建一个符号链接

sudo ln -s /opt/bochs/gdbstub/bin/bochs /usr/bin/bochs


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/6250557.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-19
下一篇 2023-03-19

发表评论

登录后才能评论

评论列表(0条)

保存