aarch64-paging

aarch64-paging クレートを使うと、AArch64 仮想メモリシステムアーキテクチャに従ってページテーブルを作成できます。

// 著作権 2023 Google LLC
// SPDX-License-Identifier: Apache-2.0

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

const ASID: usize = 1;
const ROOT_LEVEL: usize = 1;

// 恒等マッピングを持つ新しいページテーブルを作成します。
let mut idmap = IdMap::new(ASID, ROOT_LEVEL);
// 2 MiB のメモリ領域を読み取り専用としてマップします。
idmap.map_range(
    &MemoryRegion::new(0x80200000, 0x80400000),
    Attributes::NORMAL | Attributes::NON_GLOBAL | Attributes::READ_ONLY,
).unwrap();
// ページテーブルを有効化するために `TTBR0_EL1` を設定します。
idmap.activate();
  • これは Android の Protected VM Firmware で使用されています。
  • この例は実機または QEMU 上で実行する必要があるため、これ単体で簡単に実行する方法はありません。