6个版本
0.11.0 | 2024年3月11日 |
---|---|
0.10.4 | 2023年4月13日 |
0.10.3 | 2023年3月9日 |
0.10.2 | 2021年8月22日 |
0.10.1 | 2021年5月17日 |
#94 在 硬件支持
3,550 每月下载量
在 10 个crates中使用 (8 个直接使用)
12KB
91 行
pic_8259
8259和8259A可编程中断控制器(PICs)的抽象。
本项目是基于pic8259_simple
crate的分支,由@emk创建。
我们可能还处理不好的事情包括
- 处理假中断。
- 非标准配置。
此代码基于OSDev Wiki PIC notes,但不是它们讨论的完整实现。另外请注意,如果您想进行更复杂的中断处理,尤其是在多处理器系统上,您可能需要了解较新的APIC和IOAPIC接口。
使用
这是8259和8259A中断控制器的一个非常基础的接口,这些控制器用于单处理器系统,用于将硬件中断传递到CPU。
要使用此crate,将其添加到您的Cargo.toml
文件中,同时添加适当的内核空间互斥锁实现,如spin
[dependencies]
pic8259 = "0.10.0"
spin = "0.9.0"
然后您可以声明一个全局、可锁定的ChainedPics
对象,如下所示
use pic8259::ChainedPics;
use spin::Mutex;
// Map PIC interrupts to 0x20 through 0x2f.
static PICS: Mutex<ChainedPics> =
Mutex::new(unsafe { ChainedPics::new(0x20, 0x28) });
在启用中断之前,调用initialize
以执行运行时PIC初始化
PICS.lock().initialize();
在处理完中断后,运行
PICS.lock().notify_end_of_interrupt(interrupt_id);
在每次中断后调用notify_end_of_interrupt
是安全的;notify_end_of_interrupt
函数将尝试确定需要做什么。
所有公共PIC接口都是unsafe
,因为通过错误配置PIC或错误使用它,很容易触发未定义的行为。
crate功能标志
nightly
- 使用仅在nightly Rust上可用的功能。默认启用。stable
- 启用此功能标志以在稳定版Rust上构建此crate。您需要在您的Cargo.toml
中添加default-features = false, features = ["stable"]
。
许可证
根据您的选择,受Apache许可证第2版或MIT许可证的许可。
依赖项
约565KB
约11K SLoC