#page-table #virtual-memory #aarch64 #arm #cortex-a #vmsa

无std aarch64-paging

一个用于操作ARM64虚拟内存系统架构页表的库

10个版本 (6个重大更改)

0.7.1 2024年8月2日
0.7.0 2024年7月19日
0.6.0 2024年5月31日
0.5.0 2023年10月25日
0.2.1 2022年6月29日

#464嵌入式开发

Download history 10/week @ 2024-05-20 141/week @ 2024-05-27 21/week @ 2024-06-03 14/week @ 2024-06-10 1/week @ 2024-06-17 25/week @ 2024-07-01 3/week @ 2024-07-08 103/week @ 2024-07-15 17/week @ 2024-07-22 136/week @ 2024-07-29 8/week @ 2024-08-05 9/week @ 2024-08-12

每月174次下载

MIT/Apache

130KB
2K SLoC

ARM64页表操作

crates.io page docs.rs page

本包提供了一个用于操作符合ARM64虚拟内存系统架构的页表的库。

目前它仅支持

  • 阶段1页表
  • 4 KiB页面
  • EL3, NS-EL2, NS-EL2&0和NS-EL1&0转换机制

这不是一个官方支持的谷歌产品。

许可证

根据您的选择,许可协议为以下之一

贡献

如果您想为该项目做出贡献,请参阅我们接受贡献的详细信息


lib.rs:

一个用于操作ARM64 VMSA页表的库。

目前它仅支持

  • 阶段1页表
  • 4 KiB页面
  • EL3, NS-EL2, NS-EL2&0和NS-EL1&0转换机制

提供了对身份映射(IdMap)和线性映射(LinearMap)的全面支持。如果您想使用不同的映射方案,您必须提供一个Translation特质的实现,然后直接使用Mapping

示例

use aarch64_paging::{
    idmap::IdMap,
    paging::{Attributes, MemoryRegion, TranslationRegime},
};

const ASID: usize = 1;
const ROOT_LEVEL: usize = 1;
const NORMAL_CACHEABLE: Attributes = Attributes::ATTRIBUTE_INDEX_1.union(Attributes::INNER_SHAREABLE);

// Create a new EL1 page table with identity mapping.
let mut idmap = IdMap::new(ASID, ROOT_LEVEL, TranslationRegime::El1And0);
// Map a 2 MiB region of memory as read-write.
idmap.map_range(
    &MemoryRegion::new(0x80200000, 0x80400000),
    NORMAL_CACHEABLE | Attributes::NON_GLOBAL | Attributes::VALID | Attributes::ACCESSED,
).unwrap();
// SAFETY: Everything the program uses is within the 2 MiB region mapped above.
unsafe {
    // Set `TTBR0_EL1` to activate the page table.
    idmap.activate();
}

依赖项

~1–1.6MB
~29K SLoC