rCore-Tutorial-Book-v3
rCore-Tutorial-Book-v3 copied to clipboard
rCore-Tutorial-Book-v3/chapter2/0intro
引言 — rCore-Tutorial-Book-v3 0.1 文档
https://rcore-os.github.io/rCore-Tutorial-Book-v3/chapter2/0intro.html
qemu-system=riscv64 应为 qemu-system-riscv64
Hello, world!buhe app
scause=0x2
[kernel] IllegalInstruction in application, core dumped.
[kernel] Loading app_1
Into Test store_fault, we will insert an invalid store operation...
Kernel should kill this application!
[kernel] PageFault in application, core dumped.
[kernel] Loading app_2
3^10000=5079
3^20000=8202
3^30000=8824
3^40000=5750
3^50000=3824
3^60000=8516
3^70000=2510
3^80000=9379
3^90000=2621
3^100000=2749
Test power OK!
[kernel] Application exited with code 0
[kernel] Loading app_3
Hello 04
[kernel] Application exited with code 0
[kernel] Panicked at src/batch.rs:61 All applications completed!
unsafe {
llvm_asm!("sret");
}
报 kernel] IllegalInstruction in application, core dumped
错误,和教程不同,谢谢
编译器会 ~~把~~ 把操作系统的源码和 os/src/link_app.S 合在一起,编译出操作系统+Binary应用的ELF执行文件,并进一步转变成Binary格式。
在一个应 用 执行完毕后,还能加载另外一个应用,这主要是通过 AppManagerInner 数据结构和对应的函数 load_app 和 run_next_app 等来完成对应用的一系列管理功能。
一般来说执行一个用户态应用程序的流程是,读取elf文件,创建新的进程页表,把elf文件里面的可执行文件段分别map到这个地址空间内的不同区域,切换页表然后设置特权等级。但是现在好像还没有文件系统,也没有类似C语言里面map的功能(后面应该会有),所以就靠链接器把用户态应用程序直接写入内核映像里,执行的时候直接跳转到这片内存区域即可
20220707:可以尝试 ch2-dev
分支。之后如果遇到示例代码与当前教程版本 3.6.0-alpha.1
不适配的情况,建议检查一下是否存在更新的 -dev
分支。
在本章代码导读中 “相比于上一章的两个简单操作系统,”中的“两个”应删去
根据我自己的学习体验,在之后代码量上来之后如果只是看下面的章节,会有一种盲人摸象的感觉,很容易被细节给绕住。 因此希望后来者在阅读下面的章节前,先自己读代码,遇到不会的地方再在之后的小章节中找相关的答案。 Just Do it!
os/build.rs 到底在哪里调用的啊...
@DZL1943 Makefile里
@DZL1943 参考这个文档:https://rust-lang.github.io/rust-bindgen/tutorial-3.html
- 文中几乎所有的“邓氏鱼”都写错成“邓式鱼”,建议修改
- 这个“能”应该是“要”,表示我们需要如何实现功能:
写完应用程序后,还需实现支持多个应用程序轮流启动运行的操作系统。这里首先能把本来相对松散的应用程序执行代码和操作系统执行代码连接在一起,
https://github.com/rcore-os/rCore-Tutorial-Book-v3/blob/373c51eeabe9b1b3da21d354e0d9e0e6ac1ed685/source/chapter2/0intro.rst?plain=1#L238
这个手册的下载地址已经 404 了,它现在为 《RISC-V开放架构设计之道 The RISC-V Reader.pdf》。