实验目标:
1、改写bootsect.s
的代码,使得屏幕上可以输出"LiqingDongOS is loading..."
本实验的后面三项内容暂时未完成:
2、bootsect.s
能够完成setup.s
的载入,并跳转到setup.s
开始执行处,并输出"Now we are in SETUP"
3、setup.s
能获取硬件参数,并输出到屏幕上
4、完成了输出硬件参数的步骤后,不再继续加载linux
内核,保持上述信息
步骤:
1、进入oslab
目录,解压liunx0.11
压缩文件,然后使用make all
编译内核
2、改写bootsect.s
的内容,将字符串内容改成"LiqingDongOS is loading..."
原本的字符串是18
个字符,加上三对13,10
(13
为换行符,10
为回车符),就是24
个字符,
现在是28+6=32
个字符,将cx #24
改成 cx #32
3、编译运行,
首先进入boot
目录,使用下面的命令对bootsect.s
进行编译
as86 -0 -a -o bootsect.o bootsect.s
ld86 -0 -s -o bootsect bootsect.o
可以使用hexdump -C bootsect
查看bootset.s
的头几个字节,发现确实是01 03 10 04
,
hexdump -C bootsect
然后使用下面的指令去掉这32
个字节
dd bs=1 if=bootsect of=Image skip=32
然后再进入文件系统的boot
目录可以看到有一个512
字节的Image
文件,
将该文件复制并覆盖到linux-0.11
目录下,
然后再切换到oslab
的目录并运行linux-0.11
,就会显示出"LiqingDongOS is loading..."
,
此时第一个目标已经达成。
4、参考其他人的代码,但是还是运行不出来
未完成的任务:
1、不能正常输出"Now we are in SETUP"
考虑原因:bootsect
载入setup
出现了问题 、setup
的输出有问题
2、不能获取硬件参数并打印出来
所需要的指令:
cd ~/oslab
tar zxvf hit-oslab-linux-20110823.tar.gz
cd oslab
cd linux-0.11
make all
as86 -0 -a -o bootsect.o bootsect.s
ld86 -0 -s -o bootsect bootsect.o
hexdump -C bootsect
dd bs=1 if=bootsect of=Image skip=32
Image(512bytes) => linux-0.11
cd ~/oslab/oslab
./run
=> LiqingDongOS is loading...
HIT-OS-LAB参考资料:
1.《操作系统原理、实现与实践》-李治军、刘宏伟 编著
2.《Linux内核完全注释》
3.两个哈工大同学的实验源码
4.Linux-0.11源代码
(上述资料,如果有需要的话,请主动联系我))