继续刚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才能启用分配器
我竟然初始没读懂这句话,联合语境才明白,这句话的意思是找到可以用来存储数据的物理地址,而不能在需要物理内存的时候访问到被抽象成物理地址的外设地址。
use lazy_static::lazy_static;
看了杰哥写的地址切换代码,深深膜拜一波杰哥的码力。借用杰哥的代码,也算是输出了kernel_end的物理地址,当然也可以找到虚拟地址。
测试了物理页的分配,至此完成lab2。