为什么需要中断?
1)外设的处理速度一般慢于CPU
2)CPU不能一直等外部事件
所以设备必须有一种方法来通知CPU它的工作进度,这就是中断。
在Linux驱动程序中,为设备实现一个中断
步骤:
1)向内核注册中断
2)实现中断处理函数
中断注册
intrequest_irq(unsignedintirq,void(*handler)(int,void*,structpt_regs*),unsignedlongflags,constchar*devname,void*dev_id)
返回0表示成功,或者返回一个错误码
参数:
irq:中断号
handler:中断处理函数
flags:与中断管理有关的各种选项
devname:设备名
dev_id:共享中断时使用
在flags参数中,可以选择一些与中断管理有关的选项
如:IRQF_DISABLED(SA_INTERRUPT)
如果设置该位,表示是一个“快速”中断处理程序
如果没有,表示是一个“慢速”中断处理程序
IRQF_SHARED(SA_SHIRQ)
该位表示中断可以在设备间共享
快速中断不允许中断嵌套(不被打断)
慢速中断可以中断嵌套,其它类型的中断可以得到服务(默认)
共享中断
共享中断就是将不同的设备挂到同一个中断信号线上。
Linux对共享的支持主要是为PCI设备服务
共享中断也是通过request_irq函数来注册的,但有三个特别之处:
1)申请共享中断时,必须在flags参数中指定IRQF_SHARED位
2)dev_id参数必须是唯一的
为什么要唯一?
在释放中断时要voidfree_irq()不然内核不知道你要释放哪个设备(共享中断时有不只一个设备在用这个中断)
3)不能使用disable_irq(unsignedintirq)(这个函数是禁止中断的)
为什么?
如果使用了,共享中断信号线的设备同样无法使用中断,也就是无法正常工作了。
中断处理程序
中断处理程序是中断上下文件中运行的,所以它的行为受到某些限制:
1)不能向用户空间发送或者接受数据
2)不能使用可能引起阻塞的函数
3)不能使用可能引起调度的函数
中断函数实现流程:
释放中断
voidfree_irq(unsignedintirq,void*dev_id)
分享到:
相关推荐
·Linux设备驱动程序学习(11)-中断处理 ·Linux设备驱动程序学习(3-补)-Linux中的循环缓冲区 ·Linux设备驱动程序学习(12)-Linux设备模型(底层原理简介) ·Linux设备驱动程序学习(13)-Linux设备模型...
系统管理: 启动 常用工具 系统安装配置 管理脚本语言 数据库 网络服务 安全 gcc ...启动 中断 内存 进程 网络 系统调用 文件系统 驱动 经验 项目专题: LFYOS OSKit MiniGUI LVS LIDS 经验 Eric S. Raymond五部曲
笔记属于个人整理,分享给大家希望对大家有所帮助,该笔集中从前到后贯穿了几乎linux学习的全部笔记,有中断、软中断、串口驱动、读写设备文件、安装minicom、kermit、交叉编译器安装、内核编译、tftp的配置等等。
在linux中,系统调用是用户空间访问内核的唯一手段,除异常和中断外,他们是内核唯一的合法入口。系统调用的数量很少,在i386上只有大概300个左右。 (2)c库和系统调用的关系 应用程序员通过C库中的应用程序接口(API)...
2.Linux驱动程序 3.驱动测试程序 4.出现的问题 八.红外学习与发射 1.硬件测试程序 2.Linux驱动程序 3.驱动测试程序, 4.出现的问题 5.总结 九,网络编程, 1.常用函数 2.服务器程序 3.测试用客户程序 4.利用I0复用...
/****************** * linux内核的时间管理 ******************/ (1)内核中的时间概念 时间管理在linux内核中占有非常重要的作用。 相对于事件驱动而言,内核...定时器产生中断的频率称为节拍率(tick rate)。 在内核
非常强大的Linux内核分析的资料,中文版,617页,内容包括:Linux启动,中断,内存,进程,网络,系统调用,文件系统,驱动和一些经验。很全面。
本人学习的国嵌笔记。操作详细! 第一季 精通嵌入式 4 一. 安装tftp服务器 4 二. Samba服务器安装 4 三. NFS服务器 5 四. 安装vsftpd FTP服务器 5 第2季-裸奔吧-ARM 6 一. 安装交叉编译器 6 二. 安装驱动 6 三...
2012-06-11 21:44 6,947,979 Linux内核完全注释V3.0书签版(带源码).rar 2012-06-11 21:31 11,599 MATLAB仿真程序OFDM程序.txt 2012-06-11 21:37 14,584,477 msdn for vb6.0简体中文版.zip 2012-06-11 21:02 12,288 ...
● 驱动程序支持 Windows 98/ME/NT4.0/2000/XP/Vista 以及 Linux,通过 DLL 提供应用层 API。 ● 3.3V 电源电压,I/O 引脚支持 5V 耐压,支持低功耗睡眠模式。 ● 支持 PCMCIA 之 ExpressCard 笔记本插卡。 ● LQFP...
点击选择“是”此时机器进入固件刷新或升级中(设备在更新期间请不要中断连接)相继出现下面的图片(部分): 点击 “关闭”退出。机器刷新或升级成功.另外:如果你的电脑是首次安装使用时。可能会...
这个实时内核包含了许多传统操作系统的特征,包括任务管理,任务间通信,同步与互相排斥,中断支持,内存管理等功能,此后一些公司也纷纷推出了自己的嵌入式操作系统。这些系统均具有嵌入式的典型特点:它们都采用占...
没有闪存驱动器? 无法访问无线网络或不信任无线网络? 是否需要在不同的文件系统之间移动大于2GB的文件,但又不想设置文件共享? 试试看!屏幕截图:特征: 跨平台:Linux,Mac和Windows。 一次传输多个文件,如果...
对系统引导、保护模式、中断和异常、内存管理、线程及进程的实现和简单调度算法、简单图形界面、线程间通信机制、ide硬盘驱动、fat32文件系统进行了简单的介绍。本书大量参考了《操作系统真相还原》、《30天自己操作...
Linus Torvalds当时是一名赫尔辛基大学计算机科学系的二年级学生,经常要用自己的电脑去访问大学主机上的新闻组和邮件,为了方便读写和下载文件,他自己编写了磁盘驱动程序和文件系统,这成为了 Linux第一个内核的...
Linus Torvalds当时是一名赫尔辛基大学计算机科学系的二年级学生,经常要用自己的电脑去访问大学主机上的新闻组和邮件,为了方便读写和下载文件,他自己编写了磁盘驱动程序和文件系统,这成为了 Linux第一个内核的...