ubuntu安装bochs--《真象还原》

文章目录

    • 前言:虚拟机和OS的安装
    • 1.补全安装环境
    • 2.解压bochs安装包
    • 3.创建.disk文件
    • 4.创建.img硬盘文件
      • 4.1方式一:但是我没成功,但是可以试试,不行就方式二
      • 4.2方式二:直接命令行输入 ./bximage
    • 5.创建.asm汇报编写bios代码
    • 6.用dd指令把.bin写入.img硬盘
    • 7.ok开始测试
    • 8.完结撒花,有错就骂,无错点赞

前言:虚拟机和OS的安装

虚拟机平台我选择的是VMWare
    优点:功能较全(可以复制粘贴,拖拽文件等等)
    缺点:相比于VirtualBox,确实臃肿了一点,大家自己权衡
OS的话我选择的是CentOS7(x86_64)的iso

1.补全安装环境

CentOS用的是yum,Ubuntu用的是apt-get
//用 ubuntu则把yum 换成apt-get

sudo yum -y install gcc
sudo yum -y install gtk2 gtk2-devel
sudo yum -y install libXt libXt-devel
sudo yum -y install libXpm libXpm-devel
sudo yum -y install SDL SDL-devel
sudo yum -y install libXrandr-devel.x86_64 
sudo yum -y install xorg-x11-server-devel 

(这里-y的意思是默认选择yes,不然你安装时要手动输入y)
你也可以试着下下来后自己make,看报错,缺什么补什么,当然想科比也彳亍

2.解压bochs安装包

比如在下的安装包: bochs-2.6.10.tar.gz

tar zxvf bochs-2.6.10.tar.gz

然后cd进入解压出来的bochs-2.6.10

cd bochs-2.6.10 

在命令行窗口输入如下指令,#代表注释可以不写,
每行意思看《真象还原》(代码也是里面扣出来的)

# \符号表示换行接着写,不然就连着一行写也行
./configure \
# 这里把bochs放在目录"$HOME/BOCHS/bochs",如果不想折磨自己,建议完全跟我的路径
# 也可以自定义路径,按着下面的套路套过去就行
--prefix=$HOME/BOCHS/bochs \      
--enable-debugger \
--enable-disasm \
--enable-iodebug \
--enable-x86-debugger \
--with-x \
--with-x11

ubuntu安装bochs--《真象还原》_第1张图片
1.上面的是在终端输入的!!!每行输入上面所对应的一行
2.#是注释,就不要输入了
3.每一行和 \ 之间有空格,同时 \ 也需要输入!因为在linux系统中,最后加入\,就表示可以换行输入命令,不然你输入一行直接按回车的话就会直接完成命令的输入,下面的就无法一起输入了!
4.第二行,即prefix那一行,表示你想把安装后的bochs放在哪里,我这里放在家目录下Downloads里面,即和bochs2.7安装包放在一起。
5.最后那一行就不需要加 空格\ 了

在上面安装的时候可能有如下问题:
fatal error: X11/Xlib.h: No such file or directory
Ubuntu 编译提示 configure: error: no acceptable C compiler found in $PATH
按照上面的步骤安装即可

成功结果大致如下(就是没有报错就是成功),中间可能各种bug,无法预测,缺什么查什么。
ubuntu安装bochs--《真象还原》_第2张图片

之后接着当前命令窗输入make

make

这个过程会有点慢
完成之后,看是否有错误 ,出现一堆warning:不用管

//因为我是用户账号来输入的,没有切换到root账号,所以需要sudo来以管理员
//的权限运行,以后所有语句没有权限时 都加上sudo 就好
sudo make install 

有问题还是缺什么查什么,成功结果大致如下
ubuntu安装bochs--《真象还原》_第3张图片

退出到最外层目录,然后进入刚刚创建的BOCHS/bochs/bin目录
图片.png
输入如下命令

//没有权限就加上sudo
./bochs

如何出现如下界面说明bochs安装成功
ubuntu安装bochs--《真象还原》_第4张图片

3.创建.disk文件

此时我们的思路:bochs装好了,
1.先创建配置文件.disk,
2.然后创建.img硬盘
3.创建.asm(或者.S)的bios代码
4.把bios代码加载进.img硬盘
5.运行测试完成

当前我们在bin目录,并且我们之后所有新建文件都放在这个bin里面

//.disk的文件名自定义,叫什么无所谓
//gedit是ubuntu的类似vim的文本编辑器
sudo gedit bochsrc.disk

在文本编辑器输入如下内容,并保存
如下路径可以根据你自己的需要修改,里面的每行的意思还是去看《真象还原》,下面代码从那里扣下来并把过时的报错内容改了之后得到

# 设置bochs在运行中能够使用的内存,我这里设置32MB
megs:32

# 设置真实机器所对应的BIOS和VGA BIOS
# 这里的路径是按照我上面讲的那两个重要文件的路径来的
# 如果你和我路径不一样,不要直接抄我的!
romimage:file=/home/你的名字/BOCHS/bochs/share/bochs/BIOS-bochs-latest
vgaromimage:file=/home/你的名字/BOCHS/bochs/share/bochs/VGABIOS-lgpl-latest

# 选择启动磁盘,我这里是选择以硬盘启动
# 如果你想按照软盘启动的话则boot: floppy
boot:disk

# 设置日志文件输出路径
log:bochs.out

# 关闭鼠标
mouse:enabled=0

# 键盘映射配置
keyboard:keymap=/home/你的名字/BOCHS/bochs/share/bochs/keymaps/x11-pc-us.map

# 磁盘设置
ata0:enabled=1,ioaddr1=0x1f0,ioaddr2=0x3f0,irq=14

# 启动盘信息hd60M.img,下面的hd60M.img为我们启动硬盘
# 我们之后创建的启动硬盘必须放在该路径下且必须同名
# 下面的path也可以写成path="hd60M.img",不过要求你的hd60M.img在bin文件夹下
ata0-master:type=disk,path="hd60M.img",mode=flat,cylinders=121,heads=16,spt=63

如下.disk创建成功
ubuntu安装bochs--《真象还原》_第5张图片

然后我们在bin目录下输入./bochs ,

./bochs

ubuntu安装bochs--《真象还原》_第6张图片
再输入6开始模拟
ubuntu安装bochs--《真象还原》_第7张图片
看到如下界面,再输入c
ubuntu安装bochs--《真象还原》_第8张图片
输入c后出现如下错误提示就是正确的
ubuntu安装bochs--《真象还原》_第9张图片
因为还没创建.img硬盘模拟文件,接下来开始创建

4.创建.img硬盘文件

4.1方式一:但是我没成功,但是可以试试,不行就方式二

//在bin目录下输入
./bximage -hd -mode="flat" -size=60 -q hd60M.img

出现如下问题就果断选方式二:

Unknown option: -hd

4.2方式二:直接命令行输入 ./bximage

在bin目录下输入./bximage,然后按提示操作

./bximage

得出如下结果就是成功:请直接抄,免得折磨自己
ubuntu安装bochs--《真象还原》_第10张图片
输入ls结果如下
图片.png

5.创建.asm汇报编写bios代码

.asm和.S区别不大,都是汇编后缀,用.S和.asm后缀都可以,下面用.asm后缀为例,用.S结果一样,操作步骤一样,没有区别。

5.1输入如下创建.asm文件(.S后缀效果一样,如果用.S之后文件后缀保持一致都是.S就行)

//文件名可以自定义 无所谓,只有你记得之后一直用这个名字就行
sudo gedit mbr.asm 

在.asm文件中输入如下
第一种代码是《真象还原》的原版代码,第二种是如果第一种不行的替代代码,两者的效果一样。建议先试第一种书里面的代码。不行再换

1.第一种代码由书里扣出来,如下: 可以按规律修改或补充打印字符"1 MBR"

;主引导程序 
;
;LOADER_BASE_ADDR equ 0xA000 
;LOADER_START_SECTOR equ 0x2
;------------------------------------------------------------
SECTION MBR vstart=0x7c00         
   mov ax,cs      
   mov ds,ax
   mov es,ax
   mov ss,ax
   mov fs,ax
   mov sp,0x7c00
   mov ax,0xb800
   mov gs,ax

; 清屏
;利用0x06号功能,上卷全部行,则可清屏。
; -----------------------------------------------------------
;INT 0x10   功能号:0x06	   功能描述:上卷窗口
;------------------------------------------------------
;输入:
;AH 功能号= 0x06
;AL = 上卷的行数(如果为0,表示全部)
;BH = 上卷行属性
;(CL,CH) = 窗口左上角的(X,Y)位置
;(DL,DH) = 窗口右下角的(X,Y)位置
;无返回值:
   mov     ax, 0600h
   mov     bx, 0700h
   mov     cx, 0               ; 左上角: (0, 0)
   mov     dx, 184fh	       ; 右下角: (80,25),
			       ; 因为VGA文本模式中,一行只能容纳80个字符,25行。
			       ; 下标从0开始,所以0x18=24,0x4f=79
   int     10h                 ; int 10h

   ; 输出背景色绿色,前景色红色,并且跳动的字符串"loader-zengxianghao"
   mov byte [gs:0x00],'1'
   mov byte [gs:0x01],0xA4     ; A表示绿色背景闪烁,4表示前景色为红色

   mov byte [gs:0x02],' '
   mov byte [gs:0x03],0xA4

   mov byte [gs:0x04],'M'
   mov byte [gs:0x05],0xA4   

   mov byte [gs:0x06],'B'
   mov byte [gs:0x07],0xA4

   mov byte [gs:0x08],'R'
   mov byte [gs:0x09],0xA4
   

   jmp $		       ; 通过死循环使程序悬停在此

   times 510-($-$$) db 0
   db 0x55,0xaa

  1. 第二种代码mbr.S代码如下
    下面的"Hello, OS word"可以自定义,就是最后模拟成功就会打印的字符,其他不用变
    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	"mbr-xxxxx"
times 	510-($-$$)	db	0	; 填充剩下的空间,使生成的二进制代码恰好为512字节
dw 	0xaa55				; 结束标志

保存上述.asm文件后进行如下编译成字节文件
编译成.bin文件才能写入.img硬盘跑起来

//如果用mbr.S 下面写法nasm mbr.S -o mbr.bin 
nasm mbr.asm -o mbr.bin

编译结果如下:
图片.png

6.用dd指令把.bin写入.img硬盘

sudo dd if=mbr.bin of=/home/你的名字/BOCHS/bochs/bin/hd60M.img bs=512 count=1 conv=notrunc

成功结果如下:
图片.png

7.ok开始测试

在bin目录下输入

//disk写你的文件名
./bochs -f  brochs.disk

成功读入结果如下,有bug就主要检查路径有没有错,一般挺多bug,自求多福
输入6开始模拟
ubuntu安装bochs--《真象还原》_第11张图片

此时你可能会遇到如下bug,建议检查路径,如果不行就重新建一次.img,我建了很多次,你也不会少
ubuntu安装bochs--《真象还原》_第12张图片

成功之后输入c继续调试
ubuntu安装bochs--《真象还原》_第13张图片

下面是两种不同mbr.asm代码的正确结果

1.如果用第二种代码出现如下结果成功:红色字为你在.asm文件中用第二种代码写的的hellow ,OS world
ubuntu安装bochs--《真象还原》_第14张图片2.如果用第一种《真象还原》的代码结果如下:
ubuntu安装bochs--《真象还原》_第15张图片

对了,每次测试完都会有一个.img.lock文件,记得删掉不然会锁住打不开.img报错,就在bin目录下,记得删,记得删,记得删

ubuntu安装bochs--《真象还原》_第16张图片

8.完结撒花,有错就骂,无错点赞

bug补充不完的

你可能感兴趣的:(ubuntu,linux,运维)