驱动开发系列-中断处理

一:概述

虽然有时候只需使用I/O端口就能控制设备了,但大多数实际的设备都要更复杂一些。设备必须与外界交互,通常包括磁盘旋转、磁带移动、跨电缆的远距离数据传输等。很多外界交互需要花费多个处理器周期才能完成,速度要比处理器慢得多。让处理器等待外部事件完成几乎总是不可取的,因此必须有一种方式,让设备在发生事件时,或事件处理完成时通知处理器。 而这种通知的方式就是中断。

中断是设备给处理器发送的一个信号,以便让处理器留意和处理。Linux处理中断的方式与其用户空间处理信号的方式基本相同。对于大多数驱动程序来说,只需为其设备的中断注册一个处理程序,并在中断到达时正确地处理它们即可。当然,在这个简单的逻辑之下,还隐藏一些复杂性;特别是,由于中断处理程序的运行方式不用,中断处理程序所能执行的操作也有一定的限制。

如果没有真正的硬件设备来产生中断,就很难演示中断的使用。因此,本文中使用的示例代码是与并口(parallel port)一起工作的。在现代硬件中,这种端口已经开始变得稀缺,但幸运的是,大多数人在他们的系统上仍然能够获得可用的端口(实际上在现在电脑上,并口已被USB接口所取代,没有并口的情况下,可以用一根USB转并口线代替)。我们将用一个称为"short"的示例;来演示并口中断的产生和处理。示例名字之所以叫 "short", 实际上不是 short int 的意思,它是(Simple Hardware Operations and Raw Tests)的简写, 以提醒我们它可以处理中断。

不过,在进入主题之前,我需要提醒大家注意一点。中断处理程序的本质是与其他代码同时运行。因此,它们不可避免地会引发并发问题以及数据结构和硬件的争用问题。如果不熟悉Linux并发技术的朋友,我建议你回头查下并发的相关资料。因为在中断工作时,对并发控制技术的理解至关重要。

二:准备并口

为了演示本文示例,在没有并口的机器上,需要准备一根USB转并口的线。

二:注册中断处理程序

相关推荐
极客代码10 天前
【Linux】设备驱动中的ioctl详解
linux·内核·驱动·设备驱动·iocto
congchp12 天前
开启_禁止中断
linux kernel·中断处理
不知火猪1 个月前
最新雷蛇鼠标键盘驱动Razer Synapse 4(雷云) 下载与安装
计算机外设·驱动·雷云·雷蛇驱动
楼兰公子1 个月前
相机主要调试参数
arm开发·驱动·camera·v4l2
极客代码2 个月前
【Linux】【字符设备驱动】深入解析
linux·驱动开发·unix·驱动·字符设备驱动
沐多2 个月前
linux模拟HID USB设备及wireshark USB抓包配置
驱动
极客代码2 个月前
【Linux】内核驱动模块
linux·内核·内核模块·unix·驱动
郁大锤2 个月前
linux alsa-lib snd_pcm_open函数源码分析(四)
linux·音频·pcm·源码分析·驱动·alsa
昵称p2 个月前
如何解决不能将开发板连接到虚拟机的问题(连接显示灰色,不能选中)
驱动·虚拟机无法连接开发板
小仇学长2 个月前
Linux内核编程(十九)SPI子系统一驱动MCP2515(SPI转CAN模块)
linux·驱动·spi·mcp2515