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 在 嵌入式开发 中
每月下载量 336
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-a
的 Cargo.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 架构配置文件。