链接
实验1 熟悉实验环境
- 课程说明
- 主要平台和工具介绍
- 实验环境的工作模式
- 使用方法
这一章节主要是一些对于课程以及实验楼环境的说明,没什么可说的
实验2 操作系统的引导
- 评分标准
- 实验提示
实验2的第一个任务是 完成bootsect.s的屏幕输出功能,最简单的一个任务,卡了我好久。 我的做法是把 ~/oslab/linux-0.11/boot 下的bootsect.s文件中的内容根据课程提示进行了一个替换。
我是将上面这三部分根据下面这张图进行了修改
结果是bootsect的大小为548字节,去掉 Minix 可执行文件头部(在6.3中有说明)后还剩516字节,没有办法用引导扇区进行存储,所以做法一定是错的。我就改来改去,但无论怎么改bootsect的大小都没法改变。 我一直认为这个bootsect必须做很多准备工作才行,否则系统就没有办法启动。但是经过了一番奇奇怪怪的思考,我突然发觉我可能想多了,因为我们根本就没到启动系统那一步,看过课程视频的大家都应该知道这个bootsect是位于BIOS之后,也就是说BIOS的工作做完之后执行的就是bootsect,只是执行一个代码,如果在这个代码中我们写了后续系统启动的代码那后续就可以启动系统,如果在这个代码中我们写了在屏幕显示一串字符的代码那就可以在屏幕显示一段代码,我想让它执行什么就可以执行什么,显示字符串和启不启动系统完全没有关系,因为他们两个是属于同一个层级的任务。 想到这里我就明白了,我需要做的就是打开一个新的bootsect.s,只需要写 下面这段在屏幕上显示字符的代码即可
entry _start
_start:
mov ah,#0x03
xor bh,bh
int 0x10
mov cx,#36
mov bx,#0x0007
mov bp,#msg1
mov ax,#0x07c0
mov es,ax
mov ax,#0x1301
int 0x10
inf_loop:
jmp inf_loop
msg1:
.byte 13,10
.ascii "Hello OS world, my name is LZJ"
.byte 13,10,13,10
.org 510
boot_flag:
.word 0xAA55
之后使用以下命令进行编译,链接,去除Minix 可执行文件头部就可以运行了
$ as86 -0 -a -o bootsect.o bootsect.s //编译生成bootsect.o
$ ld86 -0 -s -o bootsect bootsect.o //链接生成bootsect
$ dd bs=1 if=bootsect of=Image skip=32 //去除Minix 可执行文件头部生成Image
$ cp ./Image ../Image
$ ../../run
最终结果 完成了这一小步我才明白课程的设计思路是我们需要把原有文件中的内容全部删除,从头开始写,逐步完成系统的各个过程,哎,我真是智商堪忧啊。
标签:操作系统,记录,Image,代码,mov,bootsect,课程,实验楼 From: https://blog.51cto.com/u_14882565/7836081