ucore 操作系统实验lab1

推荐从bilibili上看清华大学操作系统的视频,里面讲的很清楚。关于虚拟机镜像,我也是从向勇老师所提供的资源上下载的,他的资源里面环境都已经搭建完毕,自己搭建环境会出现很多问题。建议从网上下载,省时省心。
lab1练习一的传送门

练习1:理解通过make生成执行文件的过程

操作系统镜像文件ucore.img是如何一步一步生成的?

1 进入相应文件夹

在这里插入图片描述

2 展现编译过程

利用make V=查看文本内容
在这里插入图片描述
注意在“make V=”之前,需要先清空一下, 否则如上。
在这里插入图片描述
通过大体的阅读,我们不难发现,系统调用了gcc把源代码编译成了.o 文件。
对于很多行,前面都有一个+号,这个是编译指令,多数UNIX平台都通过CC调用它们的C编译程序在这里插入图片描述
ld通过编译又将目标文件,转化成了一个执行程序,即生成了bootblock
在这里插入图片描述
通过这个,我们看出,他生成了两个文件,分别是“bootblock”和“kernel”

所以,综上, ucore.img 的生成过程是
1 编译所有生成bin/kernel所需的文件
2 链接生成bin/kernel
3 编译bootasm.S  bootmain.c  sign.c 
4 根据sign规范生成obj/bootblock.o
5 生成ucore.img

一个被系统认为是符合规范的硬盘主引导扇区的特征是什么?

先说一下主引导扇区(MBR)干什么用的

主引导扇区在计算机引导过程中起着非常重要的作用,计算机在按下电源后,开始执行主板的BIOS程序,进行完一系列的检测和配置以后,开始按CMOS中设定的系统引导顺序进行引导。
值得一提的是,MBR有且仅有512个字节,在执行MBR的引导程序时,会验证MBR扇区最后两个字节是否为“55AA”,如果是“55AA”,那么系统才会继续执行下面的程序;如果不是“55AA”,则程序认为这是一个非法的MBR,那么程序将停止执行,同时会在屏幕上列出错误信息。

也就是说,我们需要检查是否占用512个字节,并且看后两位字节是否是“55AA”

查看sign.c的文件内容
less tools/sign.c

内容如下

	  1 #include <stdio.h>
      2 #include <errno.h>
      3 #include <string.h>
      4 #include <sys/stat.h>
      5 
      6 int
      7 main(int argc, char *argv[]) {
   
   
      8     struct stat st;
      9     if (argc != 3) {
   
   
     10         fprintf(stderr, "Usage: <input filename> <output filename>\n");
     11         return -1;
     12     }
     13     if (stat(argv[1], &st) != 0) {
   
   
     14         fprintf(stderr, "Error opening file '%s': %s\n", argv[1], strerror(errno));
     15         return -1;
     16     }
     17     printf("'%s' size: %lld bytes\n", argv[1], (long long)st.st_size);
     18     if (st.st_size > 510) {
   
   
     19         fprintf(stderr, "%lld >> 510!!\n", (long long)st.st_size);
     20         return -1;
     21     }
     22     char buf[512];
     23     memset(buf, 0, sizeof(buf));
     24     FILE *ifp = fopen(argv[1], "rb");
     25     int size = fread(buf, 1, st.st_size, ifp);
	 26     if (size != st
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值