Lab Q&A
在跟随第三版tutorial的过程中,可能会碰到一些问题。本文档总结了tutoria中现存的一些问题,并附有往届同学对该问题的一些见解。既可以将本文档当作tutorial的订正,也可以认为是个讨论区。
环境部署
补充说明
Lab 0
补充说明
"使用QEMU运行"小节----makefile直接复制的话会报错,将各命令前的空格替换为TAB就好了。这里建议大家自学下Makefile的知识。
Lab 1
补充说明
“进入中断处理流程”一节中,添加了use riscv::register::scause::Scause;,否则handle_interrupt函数的定义会报找不到Scause类型。
os/src/interrupt/handler.rs 中引入缺少一部分,因此会编译错误,加上以下部分即可。最重要的还是要仔细阅读编译器的报错信息,定位问题并解决。
“进入中断处理流程”一节中,在给main函数加入
interrupt::init()
时,如果直接整段复制有可能会把#[no_mangle]
覆盖掉,进而导致链接错误。"时钟中断"一节中,在最后给handler.rs添加时钟中断的处理时,要记得从
super
里引入timer,即:"时钟中断"一节中,
main.rs
最后要更改将rust_main函数返回类型修改一下。~~~rust // 原本 pub extern "C" fn rust_main() -> ! { // 初始化各种模块 interrupt::init();
}
// 修改后 pub extern "C" fn rust_main() { // 初始化各种模块 interrupt::init();
}
在
os/main.rs
中添加:在
memory/heap.rs
的开头添加:在
Cargo.toml
中的dependency中添加:注意
memory/mod.rs
里面的引入需要使用pub
关键字来修饰。
最后更新于