驱动开发系列-中断处理

一:概述

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

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

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

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

二:准备并口

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

二:注册中断处理程序

相关推荐
楼兰公子1 天前
相机主要调试参数
arm开发·驱动·camera·v4l2
极客代码22 天前
【Linux】【字符设备驱动】深入解析
linux·驱动开发·unix·驱动·字符设备驱动
沐多25 天前
linux模拟HID USB设备及wireshark USB抓包配置
驱动
极客代码1 个月前
【Linux】内核驱动模块
linux·内核·内核模块·unix·驱动
郁大锤1 个月前
linux alsa-lib snd_pcm_open函数源码分析(四)
linux·音频·pcm·源码分析·驱动·alsa
昵称p1 个月前
如何解决不能将开发板连接到虚拟机的问题(连接显示灰色,不能选中)
驱动·虚拟机无法连接开发板
小仇学长1 个月前
Linux内核编程(十九)SPI子系统一驱动MCP2515(SPI转CAN模块)
linux·驱动·spi·mcp2515
通俗_易懂2 个月前
44-RK3588s调试 camera-engine-rkaiq(rkaiq_3A_server)
人工智能·计算机视觉·rk3588·驱动·camera·imx415
肖爱Kun2 个月前
LINUX IIC总线驱动-设备框架
驱动
网络研究院2 个月前
微软的 Drasi:一种轻量级的事件驱动编程方法
microsoft·微软·编程·驱动·事件·轻量级·drasi