[转载] 原文:https://blog.csdn.net/bychen623/article/details/53619084
Bochs:为多平台设计的x86架构模拟器/虚拟机
材料: 1、Ubuntu16.04LTS 2、Bochs-2.6.8
下载源码而不直接使用sudo apt-get install vgabios bochs bochs-x bximage命令行安装是因为我们还要安装Bochs的调试功能
注意: 第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会自己在当前目录顺序寻找以下文件作为默认配置文件: .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.bink然后在boot.asm的目录下我们可以看到多了一个512字节的boot.bin文件,这个文件就要被我们写入到软盘里面。这里当然你可以写入到一个真实的空白软盘上,但是现在基本上都已经见不到软盘了吧,所以我们这里就用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!” 这就是一个最简单的操作系统了~