1、VMware下载安装
下载vmware,我下载的版本是VMware16pro,从其他博主给分享的下载链接,大家可以自行搜索vmware的安装,比较简单
下载位置:链接:https://pan.baidu.com/s/12KrxIUZPpeX_awp7DVkkcg?pwd=39lh
提取码:39lh
2、Ubutu操作系统下载安装
虚拟机操作系统安装的是ubuntu-22.04.4版本
百度搜索,Ubuntu镜像(由于服务器在国外,所以去官网下载ubuntu系统会非常慢。建议在国内的一些镜像站下载。),找到清华镜像:清华大学开源软件镜像站 | Tsinghua Open Source Mirror
虚拟机的创建和ubuntu操作系统的安装,大家网上自行搜索安装就可以(参考很多)。
3、下载安装Bochs
下载地址:https://udomain.dl.sourceforge.net/project/bochs/bochs/2.6.8/bochs-2.6.8.tar.gz
下载完毕之后将其移动至虚拟机中自己设定的位置,然后解压,命令:tar -zxvf bochs-2.6.8.tar.gz
先安装环境依赖
sudo apt install build-essential
sudo apt-get install libghc-x11-dev
sudo apt-get install xorg-dev
进入解压后的bochs-2.6.8文件夹 cd bochs-2.6.8,执行如下图命令,其中prefix修改为自己虚拟机中的位置
sudo ./configure \
--prefix=/home/xingchendahai01/bochs \
--enable-debugger \
--enable-disasm \
--enable-iodebug \
--enable-x86-debugger \
--with-x \
--with-x11 LDFLAGS='-pthread'
make
make install
下图为bochs安装后的信息
4、创建bochs启动的配置文件
进入安装好bochs的目录 cd
/*/*/bochs
创建bochsrc.disk
命令: touch bochsrc.disk
,在其中写下配置信息
megs : 32
romimage: file=/home/xingchendahai01/bochs/share/bochs/BIOS-bochs-latest
vgaromimage: file=/home/xingchendahai01/bochs/share/bochs/VGABIOS-lgpl-latest
boot: disk
log: bochs.out
mouse:enabled=0
keyboard:keymap=/home/xingchendahai01/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,cylinders=121,heads=16,spt=63
#gdbstub:enabled=1,port=1234,text_base=0,data_base=0,bss_base=0
5、测试bochs运行
bochs的启动配置文件,ata0-master可以先注释掉(因为此时还没有创建磁盘),然后 进入到bochs目录,执行bin/bochs -f bochsrc.disk,观察虚拟机的启动情况,如下图所示
6、创建磁盘
命令:bin/bximage
输入命令后,根据提示依次输入如下磁盘信息
1
hd
flat
60
hd60M.img
修改bochs的启动配置文件,将上图箭头所指示信息更新到bochs配置文件中的ata0-master,也即将下图的注释去掉,并根据创建后生成的CHS(柱面/磁头/扇区)进行修改
#ata0-master: type=disk, path="hd60M.img", mode=flat,cylinders=121,heads=16,spt=63
再次进入bochs目录,执行bin/bochs -f bochsrc.disk,此时报错信息跟书中一样,提示该磁盘不是启动磁盘。
7、添加mbr程序
并利用Linux自带的dd命令将其写到新创建的磁盘中的0盘0道1扇区,也即磁盘的第一块扇区,BIOS程序识别到该扇区最后两字节是0x55和0xaa,便认为此扇区中为可执行程序,便将该扇区代码加载至0x7c00处,并通过跳转语句跳转至0x7c00处执行我们自己写的mbr程序。
//安装编译器nasm
sudo apt install nasm
//编译后写入磁盘
nasm -o test mbr.s
dd if=/home/xingchendahai01/project/test of=/home/xingchendahai01/bochs/hd60M.img bs=512 count=1 conv=notrunc
SECTION MBR vstart=0x7c00
mov ax,cs
mov ss,ax
mov ax,0x7c00
mov sp,ax
;INT 0x10功能
;清屏利用0x06号功能,上卷全部行,则可清屏
mov ax,0x0600
mov bx,0x0700 ;BH是设置缺省属性,属性是指背景色,前景色,是否闪烁等,例如07H表示黑底白字,70H表示灰底黑字等等。
mov cx,0x0000
mov dx,0x184f
int 0x10
;下面三行代码获取光标位置
mov ax,0x0300
mov bx,0x0000
int 0x10
;打印字符串
mov ax,0x0000
mov es,ax
mov ax,message
mov bp,ax
mov ax,0x1301
mov bx,0x0007 ;设置字体属性,02是黑底绿字,07是黑底白字
;cx为字符串长度
mov cx,0x000c
int 0x10
jmp $
message db "Hello World!"
times 510-($-$$) db 0
db 0x55,0xaa
另外,为了方便主机和虚拟机之间拷贝文件和内容,可以执行如下两条命令,执行后,主机 和虚机之间无障碍进行复制粘贴
主机和虚拟机之间可以复制
sudo apt-get install open-vm-tools
sudo apt-get install open-tools-desktop