七度黑光---只为伊人守侯 和我共同营造苍凉的远方 醉解千愁,他处不堪留 我冷因为我看到世界的冷漠,我傲因为孤独的灵魂漂泊于芸芸众生之上,我酷因为没被事故磨去棱角,我狂因为愿意用生命去追求理想,我痴因为还相信爱情的魔力 我的笑隐约透露着孤独,快乐背后深深藏着痛楚,坚强的面对然后偷偷的哭.......

LINUX中断学习笔记1--中断的注册与释放

2008-03-08 09:05:55 / 个人分类:linux学习笔记

1.中断的注册与释放:

在 <linux/interrupt.h>, 实现中断注册接口:

int request_irq(unsigned int irq,
                irqreturn_t (*handler)(int, void *,
                struct pt_regs *), 
                unsigned long flags, 
                const char *dev_name,
                void *dev_id); 

void free_irq(unsigned int irq, void *dev_id);

函数参数说明

unsigned int irq:所要注册的中断号
irqreturn_t (*handler)(int, void *, struct pt_regs *):中断服务程序的入口地址。
unsigned long flags:与中断管理有关的位掩码选项,有三组值:


1.      SA_INTERRUPT       :快速中断处理程序,当使用它的是后处理器上所有的其他中断都被禁用。

2.      SA_SHIRQ            :该中断是在设备之间可共享的


3.      SA_SAMPLE_RANDOM   :这个位表示产生的中断能够有贡献给 /dev/random 
                            和 /dev/urandom 使用的加密池.(此处不理解)

const char *dev_name:设备描述,表示那一个设备在使用这个中断。

void *dev_id:用作共享中断线的指针. 它是一个独特的标识, 用在当释放中断线时以及可能还被驱动用来指向它自己的私有数据区(来标识哪个设备在中断) 。这个参数在真正的驱动程序中一般是指向设备数据结构的指针.在调用中断处理程序的时候它就会传递给中断处理程序的void *dev_id。(这是我的理解)如果中断没有被共享, dev_id 可以设置为 NULL, 但是使用这个项指向设备结构不管如何是个好主意. 我们将在"实现一个处理"一节中看到 dev_id 的一个实际应用。


TAG: linux学习笔记

我来说两句

-5 -3 -1 - +1 +3 +5

Open Toolbar