aarch64-paging
aarch64-paging
クレートはAArch64仮想メモリシステムアーキテクチャに則ったページテーブルの生成を可能にします。
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();
- 現時点ではEL1しかサポートされていませんが、他の例外レベルのサポートも簡単に追加できるはずです。
- これはAndroidでProtected VM Firmwareのために利用されています。
- この例は本物のハードウェアかQEMUを必要とするので、簡単には実行できません。