安装NASM
安装
1
|
sudo apt-get install nasm
|
安装完成后,如果可以查看到nasm的版本号即可视为安装成功
测试
创建一个asm文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
section .data
hello: db 'Hello world!',10 ; 'Hello world!' plus a linefeed character
helloLen: equ $-hello ; Length of the 'Hello world!' string
; (I'll explain soon)
section .text
global _start
_start:
mov eax,4 ; The system call for write (sys_write)
mov ebx,1 ; File descriptor 1 - standard output
mov ecx,hello ; Put the offset of hello in ecx
mov edx,helloLen ; helloLen is a constant, so we don't need to say
; mov edx,[helloLen] to get it's actual value
int 80h ; Call the kernel
mov eax,1 ; The system call for exit (sys_exit)
mov ebx,0 ; Exit with return code of 0 (no error)
int 80h
|
编译
1
|
nasm -f elf64 hello.asm
|
运行
如果可以正常运行没有报错说明安装成功
Bochs安装
Bochs下载与解压
直接点击链接,等待3秒即可自动下载
下载成功后解压文件
1
|
tar -zxvf bochs-2.6.8.tar.gz
|
编译安装
配置
进入bochs-2.6.2文件夹,执行以下语句,其中我把bochs安装在了我的/home/minios/bochs目录下,读者可自行修改
1
2
3
4
5
6
7
|
./configure \
--prefix=/home/minios/bochs \
--enable-debugger \
--enable-disasm \
--enable-iodebug \
--enable-x86-debugger \
--with-x --with-x11
|
配置过程中如有报错,可自行网上查阅修改
本人遇到的错误:
1
|
ERROR: pkg-config was not found, or unable to access the gtk+-2.0 package. Install pkg-config and the gtk+ development p
|

解决方案:
1
|
sudo apt-get install libgtk2.0-dev
|
配置成功后的界面如下所示

编译
执行make命令进行编译
注意,刚开始我使用bochs2.6.2版本编译的时候会报错,但是我换成bochs2.6.8版本后就直接编译成功了
编译成功界面

安装
安装成功的标志:
在安装路径(/home/minios/bochs)下生成了bin文件夹
配置Bochs
进入bochs目录(安装目录),新建boot.disk文件,写入以下配置,注意将相应目录修改为自己设置的目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
# 设置 Bochs 在运行过程中能够使用的内存,本例为 32MB
megs: 32
# 设置对应真实机器的 BIOS 和 VGA BIOS
romimage: file=/home/minios/bochs/share/bochs/BIOS-bochs-latest
vgaromimage: file=/home/minios/bochs/share/bochs/VGABIOS-lgpl-latest
# 设置 Bochs 使用的磁盘
# floppya: 1_44=a.img, status=inserted
# 选择启动盘符
# boot: flopy # 默认从软盘启动
boot: disk # 从硬盘启动,我们的任何代码都将直接写在硬盘上,所以不会再有读写软盘的操作。
# 设置日志文件输出
log: bochs.out
# 关闭鼠标,打开键盘,按照书上写会报错
mouse: enabled=0
#keyboard: enabled=1,
keyboard: keymap=/home/minios/bochs/share/bochs/keymaps/x11-pc-us.map
# 硬盘设置
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
# 增加 Bochs 对 GDB 的支持,GDB 远程连接到此机器的 1234 端口便可调试
# gdbstub: enabled=1, port=1234, test_base=0, data_base=0, bss_base=0
|
保存退出后,启动bochs
1
|
./bin/bochs -f boot.disk
|
如下图所示, 看到数字[6]就直接按下回车,之后再按键盘c,否则报错就检查错误,如配置文件中的路径是否写对等

安装成功!

创建启动盘
仔细观察上述运行成功的bochs,可以看到bochs会报错显示
Boot failed:could not read the boot disk

那是因为此时系统中还没有启动盘,接下来我们需要创建启动盘
bochs给我们提供了创建虚拟硬盘的工具,使用如下命令可以查看相关指令

接下来我们来根据帮助创建虚拟硬盘,在终端输入
其余具体步骤如下所示

接下来,我们需要将创建的虚拟硬盘的信息写入到配置文件中,注意柱面、磁道和扇区信息(上图红框中的CHS信息)也要写进去
打开配置文件
加入以下代码
1
|
ata0-master: type=disk, path="hd60M.img", mode=flat,cylinders=121,heads=16,spt=63
|
完整文件内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
# 设置 Bochs 在运行过程中能够使用的内存,本例为 32MB
megs: 32
# 设置对应真实机器的 BIOS 和 VGA BIOS
romimage: file=/home/minios/bochs/share/bochs/BIOS-bochs-latest
vgaromimage: file=/home/minios/bochs/share/bochs/VGABIOS-lgpl-latest
# 设置 Bochs 使用的磁盘
# floppya: 1_44=a.img, status=inserted
# 选择启动盘符
# boot: flopy # 默认从软盘启动
boot: disk # 从硬盘启动,我们的任何代码都将直接写在硬盘上,所以不会再有读写软盘的操作。
# 设置日志文件输出
log: bochs.out
# 关闭鼠标,打开键盘,按照书上写会报错
mouse: enabled=0
#keyboard: enabled=1,
keyboard: keymap=/home/minios/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
# 增加 Bochs 对 GDB 的支持,GDB 远程连接到此机器的 1234 端口便可调试
#gdbstub: enabled=1, port=1234, test_base=0, data_base=0, bss_base=0
|
保存退出,再次运行bochs
1
|
./bin/bochs -f boot.disk
|
可以看到,虽然仍旧报错,但是报错信息不再是不能读取启动盘,说明启动盘已经创建好了
Boot failed:not a bootable disk

参考:
《操作系统真象还原》第一章 —- 安装Vmware Station 安装Ubuntu 装载配置Bochs 安装Vmware tools 开始乘帆历险!_学习操作系统真相还原安装虚拟机-CSDN博客
操作系统真象还原环境搭建-详细实践版 - 知乎