一个操作系统的实现


环境搭建

在操作系统复现需要在Ubuntu操作系统下完成,选用了VMware安装Ubuntu虚拟机。

为了通过纯软件的方式模拟硬件,需要一个非常重要的模拟器:Bochs。
另外还需要NASM汇编工具。

在VMware上安装Ubuntu

Ubuntu是一个以桌面应用为主的Linux操作系统,在Vmware上安装Ubuntu虚拟机需要用到镜像文件ubuntu-20.04.1-desktop-amd64.iso,Ubuntu 20.04 需要 2 core, 4 GB RAM, 至少 25G 磁盘。之后按照给出的流程安装然后配置。

NASM安装

我们编写的源程序还需要经过编译才可以进行Bochs调试。汇编语言的编译需要用到nasm命令。

安装完NASM后,编译链接运行hello.asm,成功运行说明安装成功

nasm -f elf64 hello.asm
ld -s -o hello hello.o
./hello

Bochs安装

Bochs是一个x86硬件平台的开源模拟器。它可以模拟各种硬件的配置。Bochs模拟的是整个PC平台,包括I/O设备、内存和BIOS。更为有趣的是,甚至可以不使用PC硬件来运行Bochs。事实上,它可以在任何编译运行Bochs的平台上模拟x86硬件。

在Ubuntu系统下我们可以用命令行安装和编译Bochs

在安装前执行

sudo apt-get install build-essential xorg-dev libgtk2.0-dev bison

然后安装和编译Bochs

tar vxaf bochs-2.5.1.tar.gz
cd bochs-2.5.1
./configure –enable-debugger-enable-disasm
make
sudo make install

接下来调试Bochs,检测是否能正常运行,在查找资料和书籍后,发现要修改一个配置文件,在bochs-2.6.9目录下,有一个配置文件 .bochsrc,我们需要修改,让他运行我们的a.img

reset_on_triple_fault=1, ignore_bad_msrs=1, msrs="msrs.def"
cpu: model=amd_k6_2_chomper, count=1, ips=50000000, reset_on_triple_fault=1, ignore_bad_msrs=1, msrs="msrs.def"
cpu: cpuid_limit_winnt=0
memory: guest=512, host=256
romimage: file=$BXSHARE/BIOS-bochs-latest, options=fastboot
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
mouse: enabled=0
pci: enabled=1, chipset=i440fx
private_colormap: enabled=0
floppya: 1_44=a.img, status=inserted, write_protected=1
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
ata1: enabled=1, ioaddr1=0x170, ioaddr2=0x370, irq=15
ata2: enabled=0, ioaddr1=0x1e8, ioaddr2=0x3e0, irq=11
ata3: enabled=0, ioaddr1=0x168, ioaddr2=0x360, irq=9
heads=6, spt=17
journal=vvfat.redolog
boot: floppy
floppy_bootsig_check: disabled=0
log: bochsout.txt
panic: action=ask
error: action=report
info: action=report
debug: action=ignore, pci=report # report BX_DEBUG from module 'pci'
debugger_log: -
parport1: enabled=1, file="parport.out"

配置文件,即告诉Bochs,内存多大、硬盘映像和软盘映像都是那些文件的内容配置文件将a.img作为启动盘

之后编译给出的boot.asm文件

nasm boot.asm –o boot.bin
nasm -f bin boot.asm -o boot.bin

将文件写入软盘的第一个扇区

sudo dd if=boot.bin of=/dev/fd0 bs=512 count=1

输入bochs -f bochsrc启动


文章作者: Aiaa
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Aiaa !
  目录