#raspberry-pi #bare-metal #ruspiro #virtual-memory #memory-management #memory-region #mmu

nightly sys no-std ruspiro-mmu

用于使用和配置 Raspberry Pi 的内存管理单元 (MMU) 的函数

2 个版本

0.1.1 2021 年 4 月 26 日
0.1.0 2020 年 9 月 26 日

#2243嵌入式开发

每月 44 次下载

Apache-2.0

36KB
367

RusPiRo MMU API

该包提供了配置和维护 Raspberry Pi 内存管理单元 (MMU) 的 API。它允许维护 EL2 和 EL1 的配置设置。

Travis-CI Status Latest Version Documentation License

用法

要使用此包,只需将其依赖项添加到您的 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-APACHEhttp://www.apache.org/licenses/LICENSE-2.0 ) 或 MIT ( LICENSE-MIThttp://opensource.org/licenses/MIT ) 许可,由您选择。

依赖项

~84KB