3个不稳定版本
使用旧的Rust 2015
0.2.0 | 2020年5月20日 |
---|---|
0.1.1 | 2016年9月18日 |
0.1.0 | 2015年11月12日 |
在硬件支持中排名第1016
1,083次每月下载
在 2 crate中使用
18KB
153 行
内核空间对8259和8259A可编程中断控制器(PIC)的接口
正在进行中:我不具备编写此crate的资格。该crate已在QEMU的简单情况下得到验证。它可能在真实硬件(特别是有问题的硬件)或更复杂的情况下出错。欢迎您提交bug报告和PR。我们可能还处理不好以下事项:
- 屏蔽中断。
- 处理虚假中断。
- 非标准配置。
此代码基于OSDev Wiki PIC笔记,但它并不是他们讨论的所有内容的完整实现。此外,请注意,如果您想进行更复杂的中断处理,尤其是在多处理器系统中,您可能需要了解较新的APIC和IOAPIC接口。
使用
这是对8259和8259A中断控制器的一个非常基本的接口,这些控制器用于将硬件中断传递给CPU的单处理器系统。
要使用此crate,请将其添加到您的Cargo.toml
文件中,同时添加适当的内核空间互斥锁实现,例如spin
[dependencies]
pic8259_simple = "*"
spin = "*"
然后您可以声明如下全局、可锁定的ChainedPics
对象
extern crate pic8259_simple;
extern crate spin;
use pic8259_simple::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或使用不当很容易引发未定义的行为。
许可
根据您的选择,在Apache License,版本2.0或MIT许可下许可。