《操作系统真象还原》chapter1 环境搭建


环境:wsl Ubuntu22.04

安装GCC

安装gcc

apt install gcc

安装NASM

NASM是一个多平台的汇编编译器,语法简洁易用。

apt install nasm

安装Bochs

Bochs是一个用于模拟硬件的虚拟机。

包管理安装

apt install bochs

源码编译安装

  • 下载源代码

wget https://sourceforge.net/projects/bochs/files/bochs/2.7/bochs-2.7.tar.gz/download

  • 编译安装
1
2
3
./configure --prefix=/home/kanshan/Desktop/bochs --enable-debugger --enable-disasm --enable-iodebug --enable-x86-debugger --with-x --with-x11 LDFLAGS='-pthread'
make
make install

配置Bochs

bochs启动时会根据配置文件进行创建

所以我们要编写一个配置文件给bochs配置硬件。

编译安装的目录下有样本文件:share/doc/bochs/bochsrc-sample.txt

apt包管理安装的bochs的配置文件在/etc/bochs-init/bochsrc目录下

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 configuration file 
# bochsrc.disk

# memory size: 32MB
# 设置 Bochs 在运行过程中能够使用的内存,本例为 32MB
megs: 32

# BIOS and VGA BIOS
# 设置对应的真实机器的 BIOS 和 VGA BIOS
# 软件安装位置
romimage: file=/usr/share/bochs/BIOS-bochs-latest
vgaromimage: file=/usr/share/bochs/VGABIOS-lgpl-latest

# boot from hard disk (rather than floppy disk)
# 选择启动盘符
boot: disk

# log file
# 设置日志文件的输出
log: bochs.out

# disable mouse, enable keyboard
# 关闭鼠标,并打开键盘
mouse: enabled=0
keyboard: keymap=/usr/share/bochs/keymaps/x11-pc-us.map

# hard disk setting
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14

# gdb part setting
#gdbstub: enabled=1, port=1234, text_base=0, data_base=0, bss_base=0

我们将上面的配置存为bochsrc.disk放在bochs安装目录下。

运行Bochs

运行bochs需要给它创建一个虚拟启动盘

用于创建虚拟硬盘的工具bin/bximage

创建虚拟硬盘,输入命令bin/bximage

然后在输出的交互窗口中依次输入

1
2
3
4
5
6
Please choose one [0]1
Please type hd or fd. [hd]hd
Please type flat, sparse, growing, vpc or vmware4. [flat]flat
Please type 512, 1024 or 4096. [512]回车
[10]60
[c.img]hd60M.img

最后一个hd60M.img是我们创建的虚拟硬盘的名称。

然后在配置文件中添加以下内容

1
2
# hard disk setting
ata0-master: type=disk, path="hd60M.img", mode=flat,cylinders=121,heads=16,spt=63

接下来我们通过经典Hello World!的代码来测试运行

将代码保存为mbr.s文件

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
SECTION MBR vstart=0x7c00
mov ax,0x0000
mov ss,ax
mov ax,0x7c00
mov sp,ax

mov ax,0x0600
mov bx,0x0700
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
mov cx,0x000c
int 0x10

jmp $
message db "Hello World!"
times 510-($-$$) db 0
db 0x55,0xaa

nasm编译代码为可执行文件

执行命令nasm mbr.s -o test

然后将可执行文件写入虚拟机启动磁盘

if后面填写二进制文件路径,of后面填写磁盘路径。

dd if=/root/test of=/root/bochs/hd60M.img bs=512 count=1 conv=notrunc

启动虚拟机查看效果,-f加载配置文件

bochs -f bochsrc.disk

输出

1
2
3
4
5
6
7
8
9
1. Restore factory default configuration
2. Read options from...
3. Edit options
4. Save options to...
5. Restore the Bochs state from...
6. Begin simulation
7. Quit now

Please choose one: [6]

回车,然后输入c(continue)。

即可看到输出的Hello World!

到这里我们的环境已经搭建成功了!

后言

参考链接:用《操作系统真象还原》写一个操作系统 第二章 编写MBR主引导记录,让我们开始掌权