ucore实验:构建512字节bootloader与ucore.img生成过程

需积分: 50 8 下载量 2 浏览量 更新于2024-07-16 收藏 25KB DOCX 举报
在清华大学操作系统ucore实验的lab1中,参与者将深入理解操作系统启动过程和基本的系统架构。本次实验的核心任务是创建一个小型bootloader,它能在X86架构下进入保护模式,并能够处理磁盘操作和加载ELF执行文件格式,为ucore OS的启动做准备。实验内容涉及的不仅仅是实际编程,还包括对构建工具如GNU Makefile的理解和应用。 首先,lab1中的练习1要求学生解析Makefile,这是一个关键的构建工具,用于自动化编译和链接过程。Makefile通过定义目标(target)、依赖项(prerequisites)和命令(command)规则,确保在指定条件下编译所需文件。在这个实验中,Makefile的目标是生成操作系统镜像文件ucore.img,该文件由两个主要部分组成:kernel(内核)和bootblock(引导块)。 ucore.img的生成过程如下: 1. 使用`$(call totarget,ucore.img)`创建目标变量UCOREIMG,表示要生成的ucore.img文件。 2. $(UCOREIMG)规则指出,当ucore.img未生成或其依赖项(kernel和bootblock)更新时,会执行以下操作: - 使用dd命令清零ucore.img,大小为10000字节,确保文件初始为空。 - 将bootblock的内容复制到ucore.img,保留原有内容,位置在文件开头。 - 将kernel的内容追加到ucore.img,从文件头的第二个扇区开始,同样保留原有内容。 3. `$(call create_target,ucore.img)`调用自定义函数create_target,进一步执行上述操作。 一个符合规范的硬盘主引导扇区(MBR,Master Boot Record)通常包含以下特征: - 它位于硬盘的0柱面、0磁头、1扇区,是一个固定的位置,通常是512字节。 - MBR包含引导加载器(如GRUB或LILO),负责加载操作系统映像到内存。 - 包含分区表,用于标识硬盘上的引导分区及其对应的分区类型和启动扇区位置。 - 有特定的魔数(Magic Number),用于检测是否为MBR格式。 通过这次实验,学生不仅锻炼了编程技能,还学习了如何使用Makefile管理和优化编译流程,同时加深了对操作系统启动流程、引导加载和硬盘结构的理解。这样的实践经验对于深入理解操作系统内部工作原理至关重要,也为今后从事软件开发特别是系统级编程打下了坚实的基础。