操作系统实验一:系统boot

时间:2024-03-12 13:14:50

花了两天都没搞定bochs,出了一些error,网上搜不到,绝望之际老宋出现,虽然他也不知道自己点了写什么/微笑脸,但是就这么神奇的跑起来了。好了终于可以开始我的第一个操作系统实验了。/痛哭流涕

实验名称:系统boot1.1

先来介绍一下这个实验是干嘛的。这个实验叫boot嘛,其实就是想在bochs上跑一下boot这个程序。老师给了个boot.asm的文件,这个文件用nasm编译后会生成一个boot.bin文件,boot.bin一般放置在boot扇区。现在我们用软盘作为引导盘,然后在启动x86类型的计算机的时候,BIOS就自动把boot扇区的引导程序加载到内存中的0:7C00处了,然后跳转到0:7C00开始执行boot程序。

实验过程:

准备的东西(bochsrc,boot.asm):

其中bochsrc是bochs的配置文件,这个要根据自己电脑某些文件设置一些路径;boot.asm是老师给的文件这个不用管。

所以,我们要做的,就是

1.把boot.asm编译了,得到boot.bin;

2.弄个软盘

3.启动bochs跑他个boot

1:

这个简单。首先你得先装好NASM编译器,这个就不展开说了。

然后在当前工作目录下打开终端输入下列命令:

nasm -o boot.bin boot.asm

然后就得到boot.bin了

2:

在弄个软盘前,我们先设置bochsrc文件:

###############################################################
# Configuration file for Bochs
###############################################################

# how much memory the emulated machine will have
megs: 32

# filename of ROM images
romimage: file=/usr/share/bochs/BIOS-bochs-latest
vgaromimage: file=/usr/share/vgabios/vgabios.bin

# what disk images will be used
floppya: 1_44=a.img, status=inserted

# choose the boot disk.
boot: floppy

# where do we send log messages?
# log: bochsout.txt

# disable the mouse
mouse: enabled=0

# enable key mapping, using US layout as default.
keyboard:keymap=/usr/share/bochs/keymaps/x11-pc-us.map

romimage和vgaromimage都是根据自己电脑上BIOS-bochs-latest和vgabios.bin的路径来设置的;而最后一行关于keyboard的设置,一开始代码是这样的:

keyboard_mapping:enabled=1,map=/usr/share/bochs/keymaps/x11-pc-us.map

但是会产生一个这样的错误:

keyboard_mapping\' is deprecated - use \'keyboard\' option instead.

如果你直接按照他的提示,把keyboard_mapping改成keyboard,那么还会产生错误:

keyboard directive malformed.

此处感谢CSDN的作者沈郎,他机灵地看了sample-txt,知道了keyboard的参数格式,于是解决了这个问题。

设置完后,输入命令:

bximage

然后选择,fd,然后剩下的直接回车就好了,就会在bochsrc所在文件夹下,即现在的工作文件夹下生成一个a.img文件,这就是我们的软盘了。

3:

先执行以下命令:

dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc

好了现在可以启动bochs了,在当前工作文件夹下打开终端输入命令:

bochs

然后选择6,会弹出一个黑框,这就是bochs了。

然后在终端输入c,回车,就会出现以下结果:

 

如果你没有出现以上结果,而是报错:

[BIOS]No bootable device.

那么你先检查一下boot.asm最后一行有没有dw 0xaa55,这是结束符的标志,如果没有就加上。

然后检查一下生成的boot.bin是不是512byte,如果不是512byte,那么添加times 510-($-$$)db 0来填满512byte。

然而我这两个都没错,也是出现了上面的Error。

再次感谢CSDN的作者沈郎,他意识到可能是dd运行失败,于是我也重新运行了一次dd,果然成功了,得到了上面的“Hello,OS world!”

 

结语:

当我看到这个框的时候,真的是内心翻滚着不可描述的激动。。。。。。

鬼知道我这两天为了装个bochs搭个做OS实验的环境经历了什么。。。。。。

但是我秉着学蛙泳的精神,在老宋的帮助下,坚持了下来,特此鸣谢我的同学老宋还有CSDN的作者沈郎。

这只是操作系统实验刚刚开始,我也清楚意识到这个实验小组不容易,并且现在退出这个mini-OS开发小组还来得及,但是我向来是个执着的人,所以希望能坚持完成这个小组的所有实验,然后在实验结束的时候还有头发哈哈哈哈哈。。。。。

(做硬件和操作系统什么的最掉头发了不是/微笑脸)