第 9 章 中断处理
中断是硬件管理的最终资源。众所周知,设备利用中断来通知软件可以对它进行操作
了。Linux 为中断处理提供了很好的接口。事实上中断处理的接口如此之好,以至于编写
和安装中断处理程序几乎和编写其它核心函数一样容易。但是由于中断处理程序和系统的
其它部分是异步运行的,使用时要注意一些事项。
本章的示例代码使用并口来产生中断。因此,如果你想运行测试程序,你必须给你的
电烙铁接上电源,即使在上一章的例子程序中你拒绝这样做。
我们用上一章的 short 模块来示范如何使用中断。这个模块的名字,short,实际上是指
short int(这是 C 语言,不是吗?),提醒我们它要对中断(interrupt)进行处理。
准备并口
虽然我在第 8 章“
硬件管理
”的“使用并口”一节已经提到,并口很简单,但它也会触发中
断。打印机就是利用这种能力来通知 lp 驱动程序它已准备好接收缓冲区中的下一个字符。
在指定接口这样做之前实际上并不会产生中断;并口标准规定设置 2 号端口的第 4 位
(0x37a,0x27a 或其它某个地址)时启动中断报告。short 模块在初始化时调用 outb 设置该位。
启动中断报告之后,每当引脚 10(所谓的"ACK"位)上的电平从低变高时,并口都会产
生一个中断。强迫接口(没有把打印机连到端口上)产生中断的最简单方法是将并行插座
的引脚 9 和引脚 10 相连。为此,你需要一个阳性的 25 针 D 型插座和一英寸的电缆线。
引脚 9 是并行数据字节中最重要的一位。如果你往/dev/short0 中写入二进制数据,就
可以产生几个中断。然而,往端口中写入 ASCII 文本将不会产生中断,因为此时不会设置
这个最重要的位。
如果你确实想“看看”产生的中断,那么,仅仅往硬件设备中写是不够的;还必须在系
统中配置一个软件处理程序。目前,Linux-x86 和 Linux-Alpha 只是简单的确认,忽略任何
在预料之外的中断。
安装中断处理程序
中断信号线是宝贵并且非常有限的资源,当只有 15 或 16 根中断信号线时尤其如此。
评论0