环境: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主引导记录,让我们开始掌权