[转载] 原文:https://blog.csdn.net/bychen623/article/details/53619084
Bochs:为多平台设计的x86架构模拟器/虚拟机
材料:
1、Ubuntu16.04LTS
2、Bochs-2.6.8
一、安装步骤:
1、到官网上下载Bochs-2.6.8.tar.gz 下载链接
下载源码而不直接使用sudo apt-get install vgabios bochs bochs-x bximage命令行安装是因为我们还要安装Bochs的调试功能
2、解压下载好源码:
tar zxvf bochs-2.6.8.tar.gz
3、进入解压后的目录,然后执行命令行:
./configure --enable-debugger --enable-disasm
make
sudo make install
注意:
第1条是开启Bochs的调试和反汇编功能;
安装过程中可能出现一些问题,一般都是一些包和引用没有安装,下面是我遇到的几个问题及解决方案:
错误1:fatal error: X11/Xlib.h: No such file or directory
解决方案:sudo apt-get install libx11-dev
错误2:fatal error: X11/extensions/Xrandr.h: No such file or directory
解决方案:sudo apt-get install xorg-dev
安装成功后,在终端输入bochs即可看到bochs的画面了:
二、配置Bochs
安装好Bochs后,接下来就需要对Bochs进行配置了,如果你不自己写配置文件的话,执行bochs命令时Bochs会自己在当前目录顺序寻找以下文件作为默认配置文件:
.bochsrc
bochsrc
bochsrc.txt
bochsrc.bxrc(仅对Windows有效)
我们可以通过ls -a命令看到Bochs安装目录下的所有文件:
然后可以进入到.bochsrc文件里面查看自带的配置信息
在这里我们自己创建一个名叫bochsrc的配置文件,来告诉Bochs我们想要的虚拟机是什么样子的,下面就是我的配置文件:
#################################################################
# Bochs的配置文件
# Configuration file for Bochs
#################################################################
# how much memory the emulated machine will have
megs: 32
# filenameof ROM images
romimage:file=/usr/local/share/bochs/BIOS-bochs-latest
vgaromimage:file=/usr/local/share/bochs/VGABIOS-lgpl-latest
# which disk image will be used 这个是启动软盘,我们虚拟出来的那个a.img
floppya:1_44=a.img, status=inserted
# choose the boot disk 确定启动方式
boot: floppy
# where do we send log messages?
log: bochsout.txt
# disable the mouse
mouse: enabled=0
# enable key mapping ,using US layout as default
keyboard:keymap=/usr/local/share/bochs/keymaps/x11-pc-us.map
注意这里要确保romimage和vgaromimage这两项的路径是正确的,不然虚拟机启动时会提示“couldn’t open ROM image file”的错误,还有Bochs的版本不一样的话,键盘设置的方式也不太一样。
接下来再来说一说如何创建镜像,bochs创建镜像是特别简单的,只需要敲下面命令:
bximage
然后会有几个选项(红框框里面的),第一个是选择生成硬盘镜像还是软盘,我们选择fd;第二个是镜像大小选择,1.44就可以了;第三个是命名,这里随便自己了。
三、最简单的操作系统
那么接下来,我们就要开始写一个最简单的操作系统了,这个代码全由汇编完成,而且只有不到20行:
org 07c00h
mov ax, cs
mov ds, ax
mov es, ax
call DispStr
jmp $
DispStr:
mov ax, BootMessage
mov bp, ax
mov cx, 16
mov ax, 01301h
mov bx, 000ch
mov dl, 0
int 10h
ret
BootMessage: db "Hello, OS world!"
times 510-($-$$) db 0
dw 0xaa55
用NASM编译一下这段代码:
nasm boot.asm -o boot.bin
k然后在boot.asm的目录下我们可以看到多了一个512字节的boot.bin文件,这个文件就要被我们写入到软盘里面。这里当然你可以写入到一个真实的空白软盘上,但是现在基本上都已经见不到软盘了吧,所以我们这里就用Bochs来虚拟出所需要的软盘。
四、Bochs的使用
1.创建软盘映像:
输入sudo bximage,然后在问到要创建hd还是fd的时候,输入fd,之后就一直回车默认就行了
2.这下我们通过虚拟,有了计算机,又有了软盘,是时候将我们刚刚编译好的引导扇区写进软盘了,Linux下自带了dd命令可以很方便地进行软盘读写:
sudo dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc
一切准备就绪,是时候进行启动Bochs了,进入到你的boot.bin所在目录下,然后在终端输入命令:
sudo bochs -f bochsrc
注意:这里要特别注意bochsrc就是我们第二步写的那个配置文件,因为安装Bochs成功之后可以在任意地方使用bochs命令了,但是要使用我们的配置文件bochsrc的话就需要加上绝对路径,比如非Bochs安装目录下运行bochs的命令如下:
sudo bochs -f /home/bychen/downloads/bochs-2.6.8/bochsrc
输入回车,
(注意:如果这里出现是一个什么都没有的一片黑色的界面的话,那是因为我们这里是带调试模式的Bochs,回车之后还需要一次回车,然后在出现Bochs提示符之后输入“c”,再次回车)
看到Bochs界面上出现的“Hello, OS world!”
这就是一个最简单的操作系统了~