实验一:系统软件启动过程

实验一:系统软件启动过程

1. 实验内容

lab1 中包含一个 bootloader 和一个 OS。这个 bootloader 可以切换到 X86 保护模式,能够读磁盘并加载 ELF 执行文件格式,并显示字符。而这 lab1 中的 OS 只是一个可以处理时钟中断和显示字符的幼儿园级别 OS。

一:练习

为了实现 lab1 的目标,lab1 提供了 6 个基本练习和 1 个扩展练习,要求完成实验报告。

1. lab1练习1

练习 1:理解通过 make 生成执行文件的过程。(要求在报告中写出对下述问题的回答)

列出本实验各练习中对应的 OS 原理的知识点,并说明本实验中的实现部分如何对应和体现了原理中的基本概念和关键知识点。

在此练习中,大家需要通过静态分析代码来了解:

  1. 操作系统镜像文件 ucore.img 是如何一步一步生成的?(需要比较详细地解释 Makefile 中每一条相关命令和命令参数的含义,以及说明命令导致的结果)

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

补充材料:

如何调试 Makefile

当执行 make 时,一般只会显示输出,不会显示 make 到底执行了哪些命令。

如想了解 make 执行了哪些命令,可以执行:

cd ~/workspace/ucore_os_lab-master/labcodes/lab1
make "V="

实验一:系统软件启动过程_第1张图片

②通过gcc编译器将Kernel目录下的.c文件编译成obj目录下的.o文件。

2. lab1练习2

练习 2:使用 qemu 执行并调试 lab1 中的软件。(要求在报告中简要写出练习过程)

为了熟悉使用 qemu 和 gdb 进行的调试工作,我们进行如下的小练习:

  1. 从 CPU 加电后执行的第一条指令开始,单步跟踪 BIOS 的执行。

  2. 在初始化位置 0x7c00 设置实地址断点,测试断点正常。

  3. 从 0x7c00 开始跟踪代码运行,将单步跟踪反汇编得到的代码与 bootasm.S 和 bootblock.asm 进行比较。

  4. 自己找一个 bootloader 或内核中的代码位置,设置断点并进行测试。

提示:参考附录“启动后第一条执行的指令”,可了解更详细的解释,以及如何单步调试和查看 BIOS 代码。提示:查看 labcodes_answer/lab1_result/tools/lab1init 文件,用如下命令试试如何调试 bootloader 第一条指令:

cd ~/workspace/ucore_os_lab-master/labcodes_answer/lab1_result
make lab1-mon

实验一:系统软件启动过程_第2张图片

补充材料: 我们主要通过硬件模拟器 qemu 来进行各种实验。在实验的过程中我们可能会遇上各种各样的问题,调试是必要的。qemu 支持使用 gdb 进行的强大而方便的调试。所以用好 qemu 和 gdb 是完成各种实验的基本要素。

默认的 gdb 需要进行一些额外的配置才进行 qemu 的调试任务。qemu 和 gdb 之间使用网络端口 1234 进行通讯。在打开 qemu 进行模拟之后,执行 gdb 并输入

target remote localhost:1234

即可连接 qemu,此时 qemu 会进入停止状态,听从 gdb 的命令。

在 lab1 里面完成代码以后,执行 make grade 应该能够评测结果是否正确。

实验一:系统软件启动过程_第3张图片

bootloader 部分

  • boot/bootasm.S :定义并实现了 bootloader 最先执行的函数 start,此函数进行了一定的初始化,完成了从实模式到保护模式的转换,并调用 bootmain.c 中的 bootmain 函数。

  • boot/bootmain.c:定义并实现了 bootmain 函数实现了通过屏幕、串口和并口显示字符串。bootmain 函数加载 ucore 操作系统到内存,然后跳转到 ucore 的入口处执行。

  • boot/asm.h:是 bootasm.S 汇编文件所需要的头文件,主要是一些与 X86 保护模式的段访问方式相关的宏定义。

实验一:系统软件启动过程_第4张图片

你可能感兴趣的:(【清华大学】《操作系统》精品课,java,开发语言)