实验目的
建立对操作系统引导过程的深入认识;
掌握操作系统的基本开发过程;
能对操作系统进行简单的控制,揭开操作系统的神秘面纱。
实验内容
此次实验的基本内容是:编写一个放入引导扇区的操作系统引导程序bootsect.s
,和一个进入保护模式前的设置程序setup.s
,并将该bootsect.s
和setup.s
编译后在Bochs
中运行,进行实验。
编写的引导程序bootsect.s
和setup.s
主要完成如下三个部分的功能:
bootsect.s能在屏幕上打印一段提示信息“XXX is booting…”,其中XXX是你给自己的操作系统起的名字,例如LZJos、Sunix等(实验者也可以做一个特色logo并显示在屏幕上,以表示自己操作系统的与众不同,当然这要花费一定的时间,也不属于加分内容,鼓励大家在将来有时间的时候做一下。)
bootsect.s
能完成setup.s
的载入,并跳转到setup.s
开始地址执行。而setup.s
向屏幕输出一行“Now we are in SETUP”。
setup.s
能获取基本的硬件参数(如内存参数、显卡参数、硬盘参数等,在本实验中只要获取一个参数就取分,获取多个参数不加分,但后面的实验中会用到某些参数,如实验六的终端设备需要显卡的参数,所以在将来需要的时候能再回来修改),将这些参数放在内存的特定地址,留着将来使用,并输出到屏幕上。
以上截取自实验指导书,下面开始实验:
1.修改bootsect.s
要求是输出“XXX is booting…”,就只要改其中的一行代码:
msg1:
.byte 13,10
.ascii "Wenix is booting..."
.byte 13,10,13,10
编译,先在终端进入Linux-0.11/boot目录下,然后输入如下命令生成新的Image
as86 -0 -a -o bootsect.o bootsect.s
ld86 -0 -s -o bootsect bootsect.o
然后把生成的Image复制到Linux-0.11,替换原文件,接着返回上层oslab目录,输入./run
运行系统,得到结果如下:
2.修改setup.s
需要输出一行字符:“Now we are in SETUP”以及硬件参数。这里参考这位大神的报告:wangyi_lin。因为说实话我不会做(这可太真实了。。。我是笑不出来)。
修改完后切到linux-0.11目录,再次编译:
$ make BootImage
这时候报错了,原因是在build.c中需要传入system文件名这个参数,我们这里不需要,所以要对build.c做一下修改,找到如下代码:
if ((id=open(argv[3],O_RDONLY,0))<0)
die("Unable to open 'system'");
注释掉就行了。
再次编译并运行,结果如下:
结束撒花。