[rCore笔记 01] 实现应用程序
写在前面
rCore前两章之前没做笔记,发现了个别人做得比较好的笔记,这里主要用别人的笔记,然后结合自己情况进行修改
参考笔记如下
https://www.cnblogs.com/chenhan-winddevil/p/18312966
增删改查
1. cargo new user 和 cargo new user --lib
我用的是后者,创建一个库类型的 Package
2. clear_bss函数部分
因为我用的还是ch1中的linker.ld文件,所以里面我的clear_bss函数中没有start_bss和end_bss,将二者改为原来的s_bss和e_bss
还有就是加unsafe块的问题,我的代码如下:
pub fn clear_bss() {
unsafe extern "C" {
unsafe fn sbss();
unsafe fn ebss();
}
(sbss as usize..ebss as usize).for_each(|a| {
unsafe { (a as *mut u8).write_volatile(0) }
});
}
3. lang_items.rs文件部分
我的编译器告诉我没有unwrap()这个函数,所以我的panic部分还是用的第一章,只不过这次没有用到sbi的帮助,内容如下:
// os/src/lang_items.rs
use core::panic::PanicInfo;
#[panic_handler]
fn panic(info: &PanicInfo) -> ! {
if let Some(location) = info.location() {
println!(
"Panicked at {}:{} {}",
location.file(),
location.line(),
info.message()
);
} else {
println!("Panicked: {}", info.message());
}
loop{}
}
4. unsafe声明问题
可能我的rust编译器的版本原因,在所有#[no_mangle]都会报错,提示我改成#[unsafe(no_mangle)],包括那几个bin目录下的文件也要改

浙公网安备 33010602011771号