aarch64-paging
aarch64-paging ν¬λ μ΄νΈλ₯Ό μ¬μ©νλ©΄ AArch64 κ°μ λ©λͺ¨λ¦¬ μμ€ν
μν€ν
μ²μ λ°λΌ νμ΄μ§ ν
μ΄λΈμ λ§λ€ μ μμ΅λλ€.
use aarch64_paging::{
idmap::IdMap,
paging::{Attributes, MemoryRegion},
};
const ASID: usize = 1;
const ROOT_LEVEL: usize = 1;
// ID λ§€νμ μ¬μ©νμ¬ μ νμ΄μ§ ν
μ΄λΈμ λ§λλλ€.
let mut idmap = IdMap::new(ASID, ROOT_LEVEL);
// 2MiB λ©λͺ¨λ¦¬ μμμ μ½κΈ° μ μ©μΌλ‘ λ§€νν©λλ€.
idmap.map_range(
&MemoryRegion::new(0x80200000, 0x80400000),
Attributes::NORMAL | Attributes::NON_GLOBAL | Attributes::READ_ONLY,
).unwrap();
// `TTBR0_EL1`μ μ€μ νμ¬ νμ΄μ§ ν
μ΄λΈμ νμ±νν©λλ€.
idmap.activate();
- νμ¬λ EL1λ§ μ§μνμ§λ§ λ€λ₯Έ μ΅μ μ λ 벨(Exception Level: EL)λ μ΄λ ΅μ§ μκ² μΆκ°ν μ μμ΅λλ€.
- Androidμμ 보νΈλ VM νμ¨μ΄μ μ¬μ©λ©λλ€.
- μ΄ μμλ₯Ό κ°λ¨νκ² μ€ννλ λ°©λ²μ μμ΅λλ€. μ€μ νλμ¨μ΄ λλ QEMUμμ μ€νν΄μΌ νκΈ° λλ¬Έμ λλ€.