Keyboard shortcuts

Press ← or β†’ to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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μ—μ„œ μ‹€ν–‰ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.