[rCore笔记 01] 实现应用程序

写在前面

rCore前两章之前没做笔记,发现了个别人做得比较好的笔记,这里主要用别人的笔记,然后结合自己情况进行修改
参考笔记如下
https://www.cnblogs.com/chenhan-winddevil/p/18312966

增删改查

1. cargo new usercargo new user --lib

我用的是后者,创建一个库类型的 Package

2. clear_bss函数部分

因为我用的还是ch1中的linker.ld文件,所以里面我的clear_bss函数中没有start_bssend_bss,将二者改为原来的s_bsse_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目录下的文件也要改

posted @ 2025-05-29 20:03  爱吃鸡魔人zf  阅读(20)  评论(0)    收藏  举报