在ubuntn16中安装和运行bochs2.6.11

今天闲来无事,把于渊的大作《一个操作系统的实现》的第一章又仔细看了一遍.

这里把实验过程记录下来,供后来者参考.

主要参考了

https://www.cnblogs.com/lfri/p/11489223.html

https://www.jianshu.com/p/dca5270d7310

两篇文章里的步骤.这里表示感谢.

一、安装bochs

1、我的硬件环境为dell笔记本insprion 5580

2、首先在dell上安装ubutn16.04 lts.过程略

3、下载bochs源码.地址为

https://jaist.dl.sourceforge.net/project/bochs/bochs/2.6.11/bochs-2.6.11.tar.gz

4.进入到源码所在目录.执行

sudo tar zxvf bochs-2.6.11.tar.gz
cd bochs-2.6.11

5.执行

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

注意参数开头是两个减号,我第一次实验的时候就少输了一个,然后就得到一堆错误...

 

6.此时会自动生成一个Makefile文件

要修改它的内容,把第88行改为

CXXFLAGS = -std=c++11 -g -O2 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -pthread  $(X_CFLAGS) $(MCH_CFLAGS) $(FLA_FLAGS)  -DBX_SHARE_PATH='"$(sharedir)"'

即在右边的开头加入编译选项 -std=c+11,

否则的话下一步的make会编译不过!

7.执行

sudo make

8执行

sudo make install

9.执行bochs命令如果有输出,就说明bochs安装成功

二、写一个最简单的loader

1、把随书源码中的第一章的boot.asm复制到实验目录下,它的内容为:

	org	07c00h			; 告诉编译器程序加载到7c00处
	mov	ax, cs
	mov	ds, ax
	mov	es, ax
	call	DispStr			; 调用显示字符串例程
	jmp	$			; 无限循环
DispStr:
	mov	ax, BootMessage
	mov	bp, ax			; ES:BP = 串地址
	mov	cx, 16			; CX = 串长度
	mov	ax, 01301h		; AH = 13,  AL = 01h
	mov	bx, 000ch		; 页号为0(BH = 0) 黑底红字(BL = 0Ch,高亮)
	mov	dl, 0
	int	10h			; 10h 号中断
	ret
BootMessage:		db	"Hello, OS world!"
times 	510-($-$$)	db	0	; 填充剩下的空间,使生成的二进制代码恰好为512字节
dw 	0xaa55				; 结束标志

2、执行

nasm -o boot.bin boot.asm

编译成功后会得到一个boot.bin文件

3、执行

bximage

这个命令的功能是制作一个软盘镜像文件

选择1制作软盘,然后选择fd,然后剩下的直接回车就好了。现在的工作文件夹下生成一个a.img文件,这就是我们的软盘了。

如果想用命令行一次生成a.img,可以用下面的命令

bximage -q -mode=create -fd=1.44M a.img

4、执行

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

这是把刚才写好的二进制启动代码写入软盘的引导扇区

5、新建一个bochsrc文件,内容为:

# how much memory the emulated machine will have
megs: 32

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

# what disk images will be used
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=1

# enable key mapping, using US layout as default.
keyboard:keymap=/usr/local/share/bochs/keymaps/x11-pc-us.map

这里的关键点就是要正确设置romimage和vgaromimage的路径.

6、执行

bochs -q -f bochsrc

如果不加-q参数,运行后可能无法结束虚拟机

7、

然后在终端窗口输入c,表示真正执行这个虚拟机,就会看到helloword

8、在虚拟机窗口里用鼠标点右上角的电源图标,即可关闭虚拟机

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章