2024年5月31日发(作者:)
2014级本科《操作系统》实验报告(实验1)
学生姓名
任课教师
实验地点
实验题目
曾帅 学号
范国祥
软件学院三楼实验室
系统初始化
1143710412 院系
实验TA
实验时间
实验学时
软件学院
XXX
2016年05月19日 星期四
1学时
实验目的:
熟悉hit-oslab实验环境;
建立对操作系统引导过程的深入认识;
掌握操作系统的基本开发过程;
能对操作系统代码进行简单的控制,揭开操作系统的神秘面纱。
实验内容及要求:
(1)阅读《Linux内核完全注释》的第6章,对计算机和Linux 0.11的引导过程进行初步的了解;
(2)尝试改写Linux0.11的引导程序bootsect.s,使其主要完成功能:bootsect.s能在屏幕上打印一
段提示信息“XXX ”,其中XXX是你给自己的操作系统起的名字;
(3)修改build.c,以便可以使用make BootImage命令。
实验过程描述、结果及思考:
简要描述实验过程(含操作步骤及看到的结果)。
(1) 修改bootsect.s中的提示信息及相关代码,这里改动
mov cx,#29//要显示的字符串长度
和
msg1:
.byte 13,10//换行+回车
.ascii "ZengShuai "//屏幕输出内容
.byte 13,10,13,10//(换行+回车)*2
(2) 在目录linux-0.11boot下,分别用命令as86 -0 -a -o bootsect.o bootsect.s和ld86 -0 -s -o bootsect
bootsect.o编译和链接bootsect.s,生成bootsect文件;
(3) 用命令dd bs=1 if=bootsect of=Image skip=32去掉bootsect的文件头生成Image文件,并复制
Image到linux-0.11目录下;
(4) 运行run命令验证运行结果,屏幕显示“ZengShuai ”,实验前部分成功;
(5) 重新编写一个setup.s,然后将其中的显示的信息改为:“Now we are in SETUP”。再次编译,重
新用make命令生成BootImage,结合提示信息和makefile文修改build.c,具体将setup.s改动如下:
mov cx,#27
mov bx,#0x0007 ! page 0, attribute 7 (normal)
mov bp,#msg1
mov ax,#0x1301 ! write string, move cursor
int 0x10
dieLoop:
j dieLoop
msg1:
.byte 13,10,13,10
.ascii "Now we are in SETUP"
.byte 13,10,13,10
将build.c改动如下:
if(strcmp("none",argv[3]) == 0)//添加判断
return 0;
if ((id=open(argv[3],O_RDONLY,0))<0)
die("Unable to open 'system'");
// if (read(id,buf,GCC_HEADER) != GCC_HEADER)
// die("Unable to read header of 'system'");
// if (((long *) buf)[5] != 0)
// die("Non-GCC header of 'system'");
for (i=0 ; (c=read(id,buf,sizeof buf))>0 ; i+=c )
if (write(1,buf,c)!=c)
die("Write call failed");


发布评论