chapter1 练习

本节难度:

本节任务

注意

注意 ch1 并不对应一次 lab 提交,本节任务在 ch3 最终提交。

  • 运行 ch1 分支的代码。

  • 结合实验指导书,掌握代码的基本结构。

  • 自学 .ld makefile 两个格式文件的基本使用方法。能够基本读懂 os/kernel.ld (C) os/linker.ld (Rust) 和 Makefile。

  • 运行 make debug, 自学 gdb 调试的方法,完成问答作业(lab1 报告要求)。

编程作业

问答作业

  1. 请学习 gdb 调试工具的使用 (这对后续调试可能会很重要),并通过 gdb 简单跟踪从机器加电到跳转到 0x80200000 的简单过程。只需要描述重要的跳转即可,只需要描述在 qemu 上的情况。

提示

  • 事实上进入 rustsbi 之后就不需要使用 gdb 调试了。可以直接阅读代码。 rustsbi起始代码

  • 可以使用示例代码 Makefile 中的 make debug 指令。

  • 一些可能用到的 gdb 指令:
    • x/10i 0x80000000 : 显示 0x80000000 处的10条汇编指令。

    • x/10i $pc : 显示即将执行的10条汇编指令。

    • x/10xw 0x80000000 : 显示 0x80000000 处的10条数据,格式为16进制32bit。

    • info register: 显示当前所有寄存器信息。

    • info r t0: 显示 t0 寄存器的值。

    • break funcname: 在目标函数第一条指令处设置断点。

    • break *0x80200000: 在 0x80200000 出设置断点。

    • continue: 执行直到碰到断点。

    • si: 单步执行一条汇编指令。

  • 事实上在整个实验中,gdb 的使用次数可能因人而异。如果每次实验都想清楚且运气好,用不到 gdb 也是有可能的。