0x1 工作环境部署
0x1.1开发操作系统的环境及工具
1)gcc编译器
2)汇编语言编译器nasm
3)VMware workstation Pro v15.1.0 build-13591040
4)Ubuntu 14.04 LTS
5)bochs v2.6.9
为了方便起见,我是用的是WMare+Ubuntu进行开发(纯属个人习惯),具体安装Ubuntu的步骤我就不在这里细说了,大家百度一下网上都有。
0x1.2 bochs的安装
首先给出bochs的官方地址:bochs官网,官方软件免费开源不用去其他地方下载。
作者安装的bochs v2.6.2版本比较老,bochs很多配置格式在最新版中发生了变化(真坑)。以下是我总结的安装最新bochs及配置的详细步骤:
1)在虚拟机中输入安装网址
2)选择最新下载链接
3)根据操作系统位数和类型选择安装文件
4)下载好了先别急着安装,先对bochs所需的依赖进行检查配置。
首先更新下软件源sudo apt-get update
保证软件列表是最新的(当然也得保证源是最新可用的)
更新后安装bochs软件依赖,注意如果不安装这些依赖会给你报一大堆恶心的错误,而且不糊给你再次安装的机会,建议大家安装前先做个虚拟机备份。
sudo apt-get install build-essential
sudo apt-get install xorg-dev
sudo apt-get install libx11-dev
sudo apt-get install libgtk2.0-dev
sudo apt-get install bison
sudo apt-get install g++
5)进入到下载bochs源码的文件夹对源码进行编译三步曲
解压缩下载好的源码压缩文件
tar zxvf bochs-2.6.9.tar.gz
进入解压后的bochs文件目录内,并按照作者给出的配置进行设置
./configure --prefix=/root/Downloads/bochs --enable-debugger --enable-disasm --enable-iodebug --with-x --with-x11
配置后若没有问题就可以开始编译了
make
如果编译没有报错执行make install
会发现在你设置的目录下创建了bochs文件目录
安装完成后在安装目录下输入./bochs
查看是否安装成功
0x1.3 配置bochs
安装好bochs虚拟机后,我们需要通过修改配置文件来告知bochs,在运行时需要从哪些虚拟硬件设备中读取信息,是软盘、USB还是硬盘。目的是为了模仿BIOS的工作原理。
打开安装目录下有样本文件:share/doc/bochs/bochsrc-sample.txt可以从该文件中查看启动顺序。
接下来就是创建启动配置文件,作者给该配置文件起名为bochsrc.disk。bochs默认会寻找bochsrc文件作为启动配置文件,可能作者这样起名可能是为了避免bochs默认加载配置文件。我这里按照作者给的名字创建配置文件。
gedit bochsrc.disk(我默认是root权限,如果不可读写在指令前添加sudo)
在该文件中添加以下内容,参考https://blog.csdn.net/the_chosen_1/article/details/88918766
进行配置。
#注意'#'后面为注注释内容
#模拟器的内存
megs:32
#这个是BIOS-bochs-latest的路径
romimage:file=/root/Downloads/bochs/share/bochs/BIOS-bochs-latest
#这个是VGABIOS-lgpl-latest的路径
vgaromimage:file=/root/Downloads/bochs/share/bochs/VGABIOS-lgpl-latest
#这个是启动软盘,就是我们下载的那个,就在当前目录下,如果不在当前目录,需要指明路径
#floppya:1_44=bootroot-0.11,status=inserted
#表示从软盘启动
#boot:floppy
#作者是从硬盘启动的,这里我们按照书上配置
boot:disk
#日志输出文件
log:bochsout.out
#开启鼠标和键盘的设置
mouse:enabled=0 #这里先禁用了鼠标因为是字符显示界面
#type 键盘类型
#keymap 键盘映射文件
#这里和原书的键盘映射不同,是新版的特性
keyboard: type=mf,keymap=/root/Downloads/bochs/share/bochs/keymaps/x11-pc-us.map
#硬盘设置
ata0: enabled=1,ioaddr1=0x1f0,ioaddr2=0x3f0,irq=14
ata0-master: type=disk, path="hd60M.img", mode=flat#根据创建磁盘后的提示信息决定
#暂时不需要远程调试
#选项还有很多,想了解更多可以参照原始的.bochsrc文件(在bochs-2.6.9/目录下)
对应的文件映射,我给出了图形化界面参考
设置好配置文件后我们可以先测试下bochs是否可以正常运行,然后按照配置文件的设置创建一个虚拟引导硬盘。
首先征在安装目录下输入bin/bochs
会出现下图结果
可以从提示信息得知,bochs已经正常启动了,但是他还没有读取配置文件信息,希望用户选择2选项,获取一个配置文件信息bochs就可以开始运行啦!
我们按回车,bochs会提示用户输入要读取配置文件名。输入我们刚创建的bochsrc.disk
读取成功会显示以下提示符,默认选项变为了[6],也就是Begin simulation选项,开始模拟x86硬件平台。
接下来继续回车的话就会出现黑屏弹框。
在Bochs中输入c
然后回车会出现一个错误提示框,因为我们还没创建引导用的硬盘。
bochs中自带了一个可以用于创建虚拟硬盘的工具bximage,这个工具使用又和书上的2.6.2版本不同。可以直接运行,根据内置的字符提示进行硬盘创建操作。
我们配置文件中设置的引导介质是硬盘,所以我们选择[1]创建一个硬盘。创建成功后bochs要求我们将配置信息修改为ata0-master: type=disk, path="hd60M.img", mode=flat
直接将这段配置信息拷贝到之前设置的配置文件中即可。
创建成功后发现目录下增加了映像文件
接下来重新运行bochs,发现再次报错。但是报错结果与上次有细微差别
上次报错是boot failed:Could not read the boot disk
而这次报错提示是boot failed:No bootable device
。因为我们没有在虚拟硬盘中添加任何引导指令。