Skip to content

Latest commit

 

History

History
90 lines (57 loc) · 2.28 KB

0721.md

File metadata and controls

90 lines (57 loc) · 2.28 KB

2020/07/21

继续刚lab2。

对工程的包调用还是不太熟悉,慢慢查资料清晰了一些:

use super::

代表从当前目录出发。

use crate::

代表从根目录出发,即os目录。

调用包要一直具体到需要使用的那个变量本身,当然也可以用use dir::*来表示所有内容。

每个可以调用的包都需要在文件夹下的mod.rs下登记。

cargo.toml中的包的调用:

[package]
name = "os"
version = "0.1.0"
authors = ["xushanpu123"]
edition = "2018"

//See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]

bit_field = "0.10.0"
bitflags = "1.2.1"
buddy_system_allocator = "0.3.9"
hashbrown = "0.7.2"
lazy_static = { version = "1.4.0", features = ["spin_no_std"] }
riscv = { git = "https://github.com/rcore-os/riscv", features = ["inline-asm"] }
spin = "0.5.2"
device_tree = { git = "https://github.com/rcore-os/device_tree-rs" }
virtio-drivers = { git = "https://github.com/rcore-os/virtio-drivers" }
rcore-fs = { git = "https://github.com/rcore-os/rcore-fs"}
rcore-fs-sfs = { git = "https://github.com/rcore-os/rcore-fs"}
xmas-elf = "0.7.0"

//panic 时直接终止,因为我们没有实现堆栈展开的功能

[profile.dev]
panic = "abort"
[profile.release]
panic = "abort"

例如调用buddy_system_allocator只需要代码:

use buddy_system_allocator::(任何需要用的结构)
#![feature(alloc_error_handler)] //main函数加入这个feature才能启用分配器
实验太难了,举步维艰,but我是贵系研究生,我要顶住顶住顶住!!!:( :( :(

操作系统怎样知道物理内存所在的那段物理地址呢?

​ 我竟然初始没读懂这句话,联合语境才明白,这句话的意思是找到可以用来存储数据的物理地址,而不能在需要物理内存的时候访问到被抽象成物理地址的外设地址。

要使用lazy_static,必须用的use竟然是:

use lazy_static::lazy_static;

看了杰哥写的地址切换代码,深深膜拜一波杰哥的码力。借用杰哥的代码,也算是输出了kernel_end的物理地址,当然也可以找到虚拟地址。

测试了物理页的分配,至此完成lab2。