Bochs简易教程

3-许一帆
3-许一帆   编辑于 2020-04-01 18:30
阅读量: 225

Bochs是个啥?

简单来说bochs是一个模拟器,能够完整的模拟一台计算机。详细来讲bochs是X86硬件平台的开源模拟器,完全可以通过软件来给我们提供各种所需的硬件资源。

和bochs类似的虚拟机软件还有我们常用的VMware、Virtuabox,但区别也是明显的。bochs是完全依靠软件来模拟整个环境的:从启动到重启包括PC的外设键盘、鼠标、磁盘以及网卡等,全部都是由软件来模拟的,而其余软件则不然(部分依赖于硬件)。

为什么需要Bochs?

了解到bochs是个啥以后,相信大家有了自己的初步认识。那我们可以利用bochs干点啥呢?换句话说一般都是谁在使用bochs呢?

一、立志于写操作系统的少年

由于Bochs完全是靠软件来模拟整个PC环境,因此它非常的适合开发操作系统,这对于立志于写自己的操作系统的少年无疑是一个福音。因为有bochs存在,使得开发调试操作系统变得容易。如果你自制的操作系统编写的启动代码没有工作,Bochs会生成一份非常详细的启动信息报告,告诉你在启动过程中到底发生了什么问题。Bochs 调试程序可以让你通过一些命令或者在debugger上进行一些操作,可以到观察内存和CPU寄存器的情况。

二、操作系统课程的学习当中

bochs完全可以通过软件来模拟硬件配置,所以可以利用bochs来模拟分配内存、分配硬件资源以及各种原理性工作。具体的怎么利用bochs去学习操作系统,对于我们大家都是任重而道远的工作。

安装Linux下的Bochs

一般情况下两条命令就可以搞定(假设你的Linux系统正常工作)

我用的是Ubuntu 18.0,安装过程一切顺利。

sudo apt-get install bochs

sudo apt-get install bochs-x

配置Bochs

为什么需要配置bochs?现在的bochs是一个x86的仿真模拟器,其实就是虚拟机系统。那这个虚拟机自然要有硬件环境配置,怎么做到的呢?其实就是通过编写bochs的配置文件(一般命名为bochsrc)。

给大家展示一个基本的例子:

megs:32 # 指定虚拟系统会被分配的内存大小32MB

romimage:flie=/usr/share/bochs/BIOS-bochs-latest #设置加载路径对应真实机器的BIOS 

vgaromimage:file=/usr/share/bochs/VGABIOS-lgpl-latest #设置加载路径对应真实机器的VGABIOS

floppya:1_44=boot.img,status=inserted # floppya是第一软驱,floppyb是第二软驱。后面标明的是软驱镜像文件的位置(boot.img是自己写的引导加载程序),软盘是否插入

boot:floppy # 选择所启动的盘符类型 

log=bochsout.txt # 设置日志文件的输出位置

mouse:enable=0 # 关闭鼠标

# 当然了上述只是最基本的,还会有相应的变型。比如说我选择从硬盘启动
ata0-master: type=disk, path="boot.img", cylinders=306, heads=4, spt=17
# 后面指明它附带的设备是硬盘,硬盘镜像文件路径(boot.img是自己写的引导加载程序),硬盘柱面数,磁头数等参数

boot=disk

具体的操作会如何变化要靠大家实践去探索啦!

Bochs常用调试命令

设置断点:b 物理地址

查询目前已经设置过的断点:info break

执行程序:c

单步执行:s

执行n条命令:step n

查看寄存器信息:r

查看段寄存器信息:sreg

打印当前栈里的内容:print-stack

帮助:help

总结Bochs运行过程

1. 安装bochs

sudo apt-get install bochs

sudo apt-get install bochs-x

2. 写一个bootloader引导加载程序

vim boot.asm  # asm是汇编语言编写的源程序文件

nasm boot.asm -o boot.bin # 编译为boot.bin二进制文件

3. 创建镜像文件

bximage #按着步骤走 最后一步是命名

4. 将bootloader写入镜像

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

5. 配置bochs

vim bochsrc  # 参考上述配置内容

6. 开机

bochs -f bochsrc  # 注意这里的bochsrc 名字不固定 你的配置文件命名为啥这就是啥 后缀名也写上

c # 最后你可能需要在命令行里输入c 才能继续运行

发现新世界

如果想要了解更多关于汇编的知识,请参考厂长所写的系列文章:回忆一下汇编的世界

如果想要了解一个简单的bootloader如何写成,请耐心等待几天后将会推出。

第一次在雪梨上发文,有任何漏洞或问题请及时评论。

收藏 转发 评论