`

Linux下 虚拟机Bochs的使用

阅读更多

1.虚拟一个软盘

 

在安装好的Bochs组件中,有一个工具叫做bximage,它不但可以生成虚拟软盘,还可以生成虚拟硬盘,这里我们生成虚拟软盘,(这是因为后面我们的测试程序是给予软盘的)。具体步骤如下:

至此就生成了一个1.44M的虚拟软盘。

2.一个简单的测试程序

我们打算从软盘启动虚拟机,这样的话我们就需要一个软盘的引导程序,来启动虚拟 机,引导程序我们使用Orange's一个操作系统的实现学习(1) 中的引导程序,在这里就不贴出其源代码了,具体的见原文。生成的文件:boot.bin

3.将测试程序写到虚拟软盘中

要将引导程序写到虚拟软盘中,用到dd命令:

dd if=boot.bin of = orange.img bs=512 count=1 conv=notrunc

 需要注意的是这里的一个参数conv=notrunc,如果不使用它的话软盘镜像文件orange.img会被截断(truncated),这是因为boot.bin要比虚拟软盘小,而如果写的是真实的软盘则没这个问题,因为真实的软盘不可能被“截断”,毕竟真的和假的还是有区别的。(这里的截断是:虚拟的软盘是一个大小为1.44M的文件,截断就是文件的大小变小了,这样可定就不再是虚拟软盘了,因此不能截断)。

4.配置虚拟机

该准备的已经准备好了,接下来就是要创造一个虚拟机。

首先是安装Bochs虚拟机:

sudo emerge -avt bochs

 安装成功后会在目录/usr/share/bochs/中有个例子:dlxlinux,可以自己研究以下。

要创建一个虚拟机其实就是配置一个配置文件,同样先看例子:

# filename of ROM images
romimage: file=/usr/share/bochs/BIOS-bochs-latest
vgaromimage: file=/usr/share/bochs/VGABIOS-elpin-2.40

# what disk images will be used 
floppya: 1_44=orange.img, status=inserted

# choose the boot disk.
boot: floppy

# 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
 

仔细研究一下上面的文件发现其实很简单,首先是BIOS设置,即romimage和vgaromimage,分别对应真实机器的BIOS和VGA BIOS,读者一定要对应其路径正确,否则会出现“couldn't open ROM iamge file”。然后是floppya配置我们要是使用的软盘将其设置为我们准备好的虚拟软盘即可。然后设置启动方式,这里设置为软盘启动。

5.启动虚拟机

如何启动虚拟起?命令如下:

bochs -f 配置文件

 如果不指定参数那么Bochs将在下面的目录中搜索配置文件:

  • .bochsrc
  • bochsrc
  • bochsrc.txt
  • bochsrc.bxrc (仅对windows有效)

如在这里我们新建一个文件.bochsrc将上述配置文件写如即可,然后运行bochs,得到下面的界面:

按照提示选线6为Begin simulation(开始模拟器),我们直接回车即可。好了我们的虚拟机器已经运行起来了,看以下效果:


由于我们的虚拟软盘中没有Loader.bin所以显示的是NO LOADER

 

好了到此我们的Bochs已经运行起来了,达到了我们的目的了。

6.Bochs高级用法

既然Bochs配置起来相对其他的虚拟机较为麻烦,为什么我们还使用它呢?这是因为它有着其他虚拟机没有的功能就是能调试操作系统,相对的代价就是运行速递满,肯定没其他的虚拟机快。

但是这里需要解决一个问题就是默认的安装bochs是不带调试功能的,因此需要自己手动编译带调试功能的bochs,首先下载代码:

emerge --fetchonly bochs

 下载后的源代码在/usr/portage/distfiles/目录下面,然后解压压缩包:

tar -xvf bochs-2.4.5.tar.gz

 先按照开启调试功能的配置进行编译的:

./configure --enable-debugger --enable-disasm  
sudo make  
sudo make install
 

这时,安装好的bochs其实就是有调试功能的所谓bochsdbg

我们将终端切换到bochs的默认安装目录下并将这个bochs重命名为bochsdbg:

cd /usr/local/bin  
sudo mv bochs bochsdbg
 

这样一个刚出炉还热气腾腾的bochsdbg就有了

那正常运行不带调试功能的bochs呢?重新编译下源代码,只是这次不带调试功能(记得先把终端切换到代码目录下):

./configure  
make  
sudo cp bochs /usr/local/bin/bochs  
 

OK~~就这样就全好了~~

正常运行就用bochs,调试就用bochsdbg

 

好了工具准备好了,下面看怎么调试:

调试的时候启动虚拟机后,首先和原来的一样选择6运行虚拟机,然后它会停在开始的地方,这是控制台会出现命令行:可以输入命令来控制虚拟机的运行与否和单步运行等,下面具体看一下:

下断点:

b 0x7c00

 运行:

c

 此时虚拟机会运行到7c00处停下来.

查看cpu信息:

info cpu

 

 

 

r

 

 

fp
 

 

sreg

 

creg

 


这里需要注意的是要查看段寄存器:使用命令srge可以看到。

查看堆栈:print-satack
查看内存物理地址内容: xp /nuf addr (xp /40bx 0x9013e)
查看线性地址内容: x /nuf addr (x /40bx 0x9013e)
反汇编一段内存: u start end (u 0x30400 0x3040D)

每执行一条指令就打印CPU信息: trace-reg (trace-reg on)
单步执行遇到函数跳过: n
显示当前断点: info break
单步执行:s
 
分享到:
评论

相关推荐

    编译成功的LINUX0.11系统(虚拟机BOCHS中编译运行,9.29M)

    可在BOCHS中运行的LINUX0.11系统,需要先安装BOCHS虚拟机(很小,2M左右)。修改方法可参照赵炯博士写的LINUX0.11内核注释的书,未修改的原始版本可在赵博士的网站上下载到。安装BOCHS后双击bochsrc-hd.bxrc进入...

    毕设&课设&项目&实训-基于64位的操作系统,使用c语言实现,可以物理平台运行和虚拟机Bochs2.7平台上运行.zip

    毕设&课设&项目&实训-基于64位的操作系统,使用c语言实现,可以物理平台运行和虚拟机Bochs2.7平台上运行,努力制作为教程ing 【项目资源】: 包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、...

    bochs(Windows和Linux下的都有)

    这东西就不多说了,很强大的东东,支持内核级的调试,实乃内核开发必备之利器

    bochs虚拟机 Windows和Linux平台下都有

    bochs虚拟机 Windows和Linux平台下都有(bochs-2.3-1.i586.rpm和Bochs-2.5.exe)

    bochs 安卓X86虚拟机

    可以在安卓系统上加载X86系统,例如WIN98 WINXP LINUX等

    bochs25.rar

    Bochs 虚拟机2.5版本;自带Linux Demo in Bochs 2.5; 可以安装运行操作系统; 也可以调试Linux系统内核;

    Bochs虚拟机软件 用于程序级开发调试使用

    提到虚拟机,大家可能都会想到VMWare,Bochs也是一个虚拟机,但是和VM在用途上还是不同的,你如果正在学习操作系统,比如某个版本的linux,或者学习系统引导程序boot等等,它是作为开发使用的虚拟机,可以进行操作...

    Bochs-2.4.2 虚拟机

    如果你想在已有操作系统安装另外若干个操作系统,用来构建实验或测试平台,虚拟机是个不错的方式。 如果你想调试操作系统,跟踪和DEBUG操作系统启动过程和原理,Bochs是不错的选择。 若果你进行汇编学习和保护模式...

    bochs-2.4.2 for linux

    2010-04-10最新的bochs版本,是最好的调试os的虚拟机,软件模拟OS

    bochs-2.4.5.tar.gz-虚拟机

    bochs-2.4.5.tar.gz bochs是一款小巧的虚拟机,简单方便。节省资源。

    bochs2.6.8(带调试界面)

    最新的bochs2.6.8 虚拟机,带调试界面,带调试文档和配置文档

    windows下可编译linux 用insight+bochs源码级调试

    这就是能在windows环境下编译的Linux 0.11了,不是在Cygwin,也不是在虚拟机里,而是使用MinGW. 下面是在Windows下编译Linux 0.11会遇到的问题和对原文件作的修改: 1.赵炯博士已经将汇编程序中引用的C变量(包括嵌入...

    bochs-2.2.5.tar.gz

    linux下的虚拟机,学习linux内核的好工具。

    一个可以用gdb调试linux内核的环境

    简单来说就是在一台linux主机上用bochs虚拟机调试内核。 用到的工具: 一台linux主机 bochs源码,压缩包中已有 busybox源码,压缩包中已有 linux内核源码,压缩包中没有包含,自己可以从www.kernel.org中下,示例...

    bochs-2.6-1.src.rpm

    适用于linux系统虚拟机的搭建。 可以用于2.6版本的内核

    Bochs x86 PC emulator

    bochs-2.6.6.tar.gz, linux 上使用的bochs虚拟机。

    Bochs-2.4.2 for windows

    Bochs-2.4.2 for windows

    一键编译带调试功能的bochs和edk2,ovmf固件

    相信很多朋友对编译安装很头疼,我也是一样,之前在学习操作系统真相还原和linux0.11的时候需要搭建带调试功能的bochs,bochs是一个模拟指令的虚拟机,所以它可以在X86上模拟arm指令,不是像其他虚拟机一样直接将...

    带中文注释可成功编译运行的Linux0.11

    此注释可以在http://oldlinux.org/Linux.old/bochs/提供的Linux-0.11-devel-XXXXXX实验环境下正确编译成功,使用:"make disk"命令重启Bochs虚拟机后,新编译源码直接生效,便于学习者直接阅读源码,直接进行实验。...

    Bochs-win32-2.6.11.exe

    Bochs-win32-2.6.11.exe 是与 VirtualBox VMware 都不同的虚拟机,可以用来模拟真实的机器,调试操作系统,底层代码,linux 0.11等,能运行早期的windows,如win95 win98。在众多虚拟机中它是唯一有此功能的一种。

Global site tag (gtag.js) - Google Analytics