chapter1 练习¶
本节难度:低
本节任务¶
注意
注意 ch1 并不对应一次 lab 提交,本节任务在 ch3 最终提交。
运行 ch1 分支的代码。
结合实验指导书,掌握代码的基本结构。
自学
.ld
makefile
两个格式文件的基本使用方法。能够基本读懂os/kernel.ld (C)
os/linker.ld (Rust)
和 Makefile。运行
make debug
, 自学 gdb 调试的方法,完成问答作业(lab1 报告要求)。
编程作业¶
无
问答作业¶
请学习 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 也是有可能的。