2 个版本
0.1.1 | 2021 年 4 月 26 日 |
---|---|
0.1.0 | 2020 年 9 月 26 日 |
#2243 在 嵌入式开发 中
每月 44 次下载
36KB
367 行
RusPiRo MMU API
该包提供了配置和维护 Raspberry Pi 内存管理单元 (MMU) 的 API。它允许维护 EL2 和 EL1 的配置设置。
用法
要使用此包,只需将其依赖项添加到您的 Cargo.toml
文件中
[dependencies]
ruspiro-mmu = "0.1.1"
MMU 的初始设置应在 Raspberry Pi 的引导序列中只调用一次。此初始设置需要知道 Raspberry Pi 上 GPU/VideoCore 使用的内存区域。
use ruspiro_mmu::*;
fn entry_point(core: u32) {
unsafe {
mmu::initialize(core, 0xDEAD_0000, 0xBEEF);
}
}
配置并激活 MMU 后,可以将物理内存区域映射到新的虚拟内存区域,具有特定的内存属性,与初始设置不同,如下所示
// just an arbitrary address for demonstration purposes
let phys_address = 0xDEADBEEF as *mut u8;
// the virtual address is of type *mut u8
let virtual_address = unsafe {
mmu::map_memory(phys_address, 1024,
( TTLB_BLOCKPAGE::AF::SET
| TTLB_BLOCKPAGE::SH::INNER
| TTLB_BLOCKPAGE::MEMATTR::MAIR3
| TTLB_BLOCKPAGE::TYPE::BLOCK
).raw_value()
)
};
请注意,当前虚拟内存映射仅实现于 块级别。这意味着无论给定的 map_memory
函数的大小如何,最小的映射内存区域大小为 2MB。因此,传递给映射的内存属性需要是 BLOCK
条目。将直接 TTLB 标志传递给内存映射函数是错误的,将在即将发布的版本中用适当的预定义常量替换,以反映有用的内存属性设置和组合。
许可证
根据 Apache 许可证版本 2.0 ( LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0 ) 或 MIT ( LICENSE-MIT 或 http://opensource.org/licenses/MIT ) 许可,由您选择。
依赖项
~84KB