#aarch64 #cpu #low-level #register #arm #processor

no-std aarch64-cpu

使用AArch64执行状态对处理器进行低级访问

6个稳定版本

9.4.0 2023年9月21日
9.3.1 2022年12月31日
9.0.0 2022年11月6日

#80 in 嵌入式开发

Download history 2937/week @ 2024-04-09 2251/week @ 2024-04-16 3499/week @ 2024-04-23 2413/week @ 2024-04-30 3174/week @ 2024-05-07 2463/week @ 2024-05-14 2434/week @ 2024-05-21 3368/week @ 2024-05-28 1913/week @ 2024-06-04 2713/week @ 2024-06-11 2458/week @ 2024-06-18 2858/week @ 2024-06-25 3406/week @ 2024-07-02 4586/week @ 2024-07-09 4692/week @ 2024-07-16 2299/week @ 2024-07-23

15,450 每月下载量
用于 7 个crate(直接使用3个)

MIT/Apache

300KB
3.5K SLoC

crates.io crates.io

aarch64-cpu

使用AArch64执行状态对处理器进行低级访问。

该项目由Cortex-A团队开发和维护。

文档

最低支持的Rust版本(MSRV)

该crate保证在当前稳定Rust版本上编译。它可能可以用较旧版本编译,但这可能在任何新补丁版本中发生变化。

使用方法

请注意,要使用此crate的寄存器定义(由 aarch64_cpu::registers::* 提供),您还需要导入 aarch64_cpu::registers::{Readable, Writeable}

示例

请查看https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials以获取使用示例。下面是 rust-raspberrypi-OS-tutorials 早期引导代码的片段。

use aarch64_cpu::{asm, registers::*};

// Some parts omitted for brevity.

unsafe fn prepare_el2_to_el1_transition(
    virt_boot_core_stack_end_exclusive_addr: u64,
    virt_kernel_init_addr: u64,
) {
    // Enable timer counter registers for EL1.
    CNTHCTL_EL2.write(CNTHCTL_EL2::EL1PCEN::SET + CNTHCTL_EL2::EL1PCTEN::SET);

    // No offset for reading the counters.
    CNTVOFF_EL2.set(0);

    // Set EL1 execution state to AArch64.
    HCR_EL2.write(HCR_EL2::RW::EL1IsAarch64);

    // Set up a simulated exception return.
    SPSR_EL2.write(
        SPSR_EL2::D::Masked
            + SPSR_EL2::A::Masked
            + SPSR_EL2::I::Masked
            + SPSR_EL2::F::Masked
            + SPSR_EL2::M::EL1h,
    );
}

免责声明

源文件中的描述性注释取自ARM架构参考手册 ARMv8,适用于ARMv8-A架构配置文件

许可证

根据以下之一授权

任选其一。

贡献

除非您明确声明,否则您有意提交以包含在作品中的任何贡献,根据Apache-2.0许可证定义,将作为上述双重许可证,不附加任何额外条款或条件。

行为准则

对该crate的贡献是在《Rust行为准则》的条款下组织的,该crate的维护者,即Cortex-A团队承诺将介入以维护该行为准则。

依赖项

~90KB