#中断 #内核 #无std

nightly no-std pic8259_simple

内核空间对8259和8259A中断控制器的接口

3个不稳定版本

使用旧的Rust 2015

0.2.0 2020年5月20日
0.1.1 2016年9月18日
0.1.0 2015年11月12日

硬件支持中排名第1016

Download history 368/week @ 2024-04-07 501/week @ 2024-04-14 460/week @ 2024-04-21 487/week @ 2024-04-28 419/week @ 2024-05-05 451/week @ 2024-05-12 452/week @ 2024-05-19 422/week @ 2024-05-26 488/week @ 2024-06-02 233/week @ 2024-06-09 428/week @ 2024-06-16 403/week @ 2024-06-23 111/week @ 2024-06-30 159/week @ 2024-07-07 401/week @ 2024-07-14 344/week @ 2024-07-21

1,083次每月下载
2 crate中使用

Apache-2.0/MIT

18KB
153

内核空间对8259和8259A可编程中断控制器(PIC)的接口

正在进行中:具备编写此crate的资格。该crate已在QEMU的简单情况下得到验证。它可能在真实硬件(特别是有问题的硬件)或更复杂的情况下出错。欢迎您提交bug报告和PR。我们可能还处理不好以下事项:

  1. 屏蔽中断。
  2. 处理虚假中断。
  3. 非标准配置。

此代码基于OSDev Wiki PIC笔记,但它并不是他们讨论的所有内容的完整实现。此外,请注意,如果您想进行更复杂的中断处理,尤其是在多处理器系统中,您可能需要了解较新的APICIOAPIC接口。

使用

这是对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.0MIT许可下许可。

依赖项