#aarch64 #arm #register #low-level

无 std cortex-a

对 Cortex-A 处理器的低级别访问

47 个稳定版本 (8 个主要版本)

8.1.1 2022 年 11 月 6 日
8.0.0 2022 年 9 月 26 日
7.5.0 2022 年 9 月 12 日
7.4.0 2022 年 6 月 18 日
0.1.3 2018 年 4 月 19 日

#1386嵌入式开发

Download history 158/week @ 2024-03-11 82/week @ 2024-03-18 54/week @ 2024-03-25 248/week @ 2024-04-01 99/week @ 2024-04-08 52/week @ 2024-04-15 57/week @ 2024-04-22 145/week @ 2024-04-29 108/week @ 2024-05-06 82/week @ 2024-05-13 62/week @ 2024-05-20 136/week @ 2024-05-27 145/week @ 2024-06-03 86/week @ 2024-06-10 59/week @ 2024-06-17 37/week @ 2024-06-24

每月下载量 336

MIT/Apache

240KB
3K SLoC

弃用通知

此 crate 已重命名为 aarch64-cpu。请在此处找到它:

版本 8.1.1 将是此 crate 的最后一个版本,并已添加以发布此消息。为了保持版本历史的合理性,aarch64-cpu 的第一个版本从 9.0.0 开始。

谢谢!


lib.rs:

对 Cortex-A 处理器的低级别访问。

当前支持的执行状态

  • AArch64
  • AArch32

最低支持的 Rust 版本

需要 Rust 的最新夜间版本。

用法

请注意,要使用此 crate 的 寄存器定义(由 cortex_a::registers::* 提供),您还需要将 tock-registers 包含在您的项目中。这是因为 tock-registers 提供的接口特质由此 crate 实现。您应该包含与此 crate 相同版本的 tock-registers,以确保合理的互操作性。

例如,在下面的代码片段中,X.Y.Z 应该与 cortex-aCargo.toml 中提到的 tock-registers 版本相同。

[package]
name = "Your embedded project"

# Some parts omitted for brevity.

[dependencies]
tock-registers = "X.Y.Z"
cortex-a = "A.B.C"       # <-- Includes tock-registers itself.

示例

查看 rust-raspberrypi-OS-tutorials 以获取使用示例。下面是 rust-raspberrypi-OS-tutorials 的早期引导代码片段。

use cortex_a::{asm, registers::*};
use tock_registers::interfaces::Writeable; // <-- Trait needed to use `write()` and `set()`.

// 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 架构配置文件

依赖项