rCore-Tutorial-Book-v3
rCore-Tutorial-Book-v3 copied to clipboard
rCore-Tutorial-Book-v3/chapter1/7exercise
练习 — rCore-Tutorial-Book-v3 3.6.0-alpha.1 文档
https://rcore-os.github.io/rCore-Tutorial-Book-v3/chapter1/7exercise.html
prinf
应为 printf
?
我们可以输出比设定输出等级以及更高输出等级的信息,如设置 LOG = INFO,则输出 ERROR、WARN、INFO 等级的信息。简单 demo 如下,输出等级为 INFO:
这里截图中 [INFO]
[WARN]
[ERROR]
后面都有一个 [0]
。请问这里 [0]
是什么意思呢?
我们可以输出比设定输出等级以及更高输出等级的信息,如设置 LOG = INFO,则输出 ERROR、WARN、INFO 等级的信息。简单 demo 如下,输出等级为 INFO:
这里截图中
[INFO]
[WARN]
[ERROR]
后面都有一个[0]
。请问这里[0]
是什么意思呢?
我猜是 CPU 编号
make run LOG=xxx可以通过features的方式传给rust代码里进行条件编译,也可以通过获取环境变量的方式来生成运行时分支执行。https://doc.rust-lang.org/reference/conditional-compilation.html、https://stackoverflow.com/questions/27632660/how-do-i-use-conditional-compilation-with-cfg-and-cargo。
这个练习能够使用crate log吗?为什么我用的时候报错log需要std库
log有不依赖std的 默认情况下不需要std 请检查下你的toml文件中是有添加了 log features=["std"] 如果有 请取消
---Original--- From: @.> Date: 2022/2/22 21:15:40 To: @.>; Cc: @.***>; Subject: Re: [rcore-os/rCore-Tutorial-Book-v3]rCore-Tutorial-Book-v3/chapter1/7exercise (Issue #110)
这个练习能够使用crate log吗?为什么我用的时候报错log需要std库
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this thread.Message ID: @.***>
获取调用栈只需要把x8(frame pointer)的值取出来,并且做指针回溯就行。riscv指令简介:http://www.sunnychen.top/2019/07/06/RISC-V基本指令集概述/
@LikyThu
这个练习能够使用crate log吗?为什么我用的时候报错log需要std库
编写操作系统是不能使用std库的,因为std库部分依赖操作系统的syscall,这时候底层没有操作系统提供syscall
ch1分支貌似没有提供sleep系统调用,编程题3的意思是要求自己实现一个sleep系统调用吗
请问一下,按照文章的理解,我在rust当中用内联汇编的形式将sp(栈顶地址)和fp(栈底地址)都打印出来了。为什么进入一个函数之后,sp存储的地址没有变化呢?并且sp存储的地址里面的值(里面应该是函数堆栈的相应函数的入口地址)是0 。不知道哪里出了问题。程序如下:
unsafe fn read_sp_and_fp() -> (u32, u32) { let (mut sp, mut fp) = (0_u32, 0_u32); asm!( "mv {}, x2", out(reg) sp, ); asm!( "mv {}, s0", out(reg) fp, ); println!("The address of sp: {:?}, the value of sp: {:?}", sp as *mut u32, unsafe{(sp as *mut u32).read_volatile()} as *mut u32); println!("The address of fp: {:?}, the value of fp: {:?}", fp as *mut u32, unsafe{(fp as *mut u32).read_volatile()} as *mut u32); (sp, fp) }
在这个函数和主函数里面各调用一次,打印sp和fp的地址 结果如下: The address of sp: 0x80213e70, the value of sp: 0x0 The address of fp: 0x80213f40, the value of fp: 0x0 The address of sp: 0x80213e70, the value of sp: 0x0 The address of fp: 0x80213f40, the value of fp: 0x0 Panicked at src/main.rs:26 Shutdown machine!
如果有人想要使用riscv的mtime寄存器完成sleep函数,qemu中mtime寄存器的频率是10Mhz。 我花了一点时间才最终在google group chat中找到这一点,我不理解为什么qemu没有在riscv virt中给出这一确切的值。
为什么现在看到的ch1已经是实现完成的代码了?