6个稳定版本
9.4.0 | 2023年9月21日 |
---|---|
9.3.1 | 2022年12月31日 |
9.0.0 | 2022年11月6日 |
#80 in 嵌入式开发
15,450 每月下载量
用于 7 个crate(直接使用3个)
300KB
3.5K SLoC
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 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则您有意提交以包含在作品中的任何贡献,根据Apache-2.0许可证定义,将作为上述双重许可证,不附加任何额外条款或条件。
行为准则
对该crate的贡献是在《Rust行为准则》的条款下组织的,该crate的维护者,即Cortex-A团队承诺将介入以维护该行为准则。
依赖项
~90KB