__setup_irq是用于设置和注册中断的核心函数,它是request_threaded_irq等函数的内部实现。 1.1. irqaction handler和thread_fn是struct irqaction的两个重要成员,由程序员指定或在__setup_irq中自动设置, 在中断发生后的处理函数被调用。 /// include/linux/interrupt.h /** * struct irqaction - per interrup...
setup_irq函数的定义如下: int setup_irq(unsigned int irq, struct irqaction *new); 其中,irq是中断号,而irqaction结构体定义了中断处理程序的相关信息,包括中断处理函数、中断标志位等。通过调用setup_irq函数,可以将新的中断处理函数注册到指定的中断号上,从而实现对中断事件的处理。 在使用setup_irq函数时,需...
分两步,第一步是与硬件和平台无关的通用逻辑层处理,其本质就是一个for循环执行一个函数desc_set_defaults(),为所有的irq_desc填充默认值。其关键点是为这些irq_desc注册的中断控制器全部先填充为一个所谓no_irq_chip。 ---kernel/irq/irqdesc.c--->staticvoiddesc_set_defaults(unsignedintirq,structirq_desc...
intsetup_irq(unsigned int irq,struct irqaction*new){int shared=0;unsigned long flags;struct irqaction*old,**p;irq_desc_t*desc=irq_desc+irq;...spin_lock_irqsave(&desc->lock,flags);p=&desc->action;if((old=*p)!=NULL){if(!(old->flags&new->flags&SA_SHIRQ)){spin_unlock_irqrestore(...
Request_irq和setup_irq的区别 Author: Dongas Data:08-07-19 Linux内核提供了两个注册中断处理函数的接口:setup_irq和request_irq。这两个函数都定义在kernel/irq/manage.c里。 /* * Internal function to register an irqaction - typically used to ...
1.1.1中断描述符结构irq_desc irq_desc:中断全局描述符 struct irq_desc { unsigned int irq;注释:表示此中断描述符的中断号 struct timer_rand_state *timer_rand_state;注释:timer伪随机数状态结构指针 unsigned int *kstat_irqs; #ifdef CONFIG_INTR_REMAP ...
status : IRQ线的状态。 handler : 类型为 hw_interrupt_type 结构,表示IRQ线对应的硬件相关处理函数,比如 8259A中断控制器 接收到一个中断信号时,需要发送一个确认信号才会继续接收中断信号的,发送确认信号的函数就是 hw_interrupt_type 中的 ack 函数。
int setup_irq(unsigned int irq, struct irqaction * new) { int shared = 0; unsigned long flags; struct irqaction *old, **p; irq_desc_t *desc = irq_desc + irq; //如果hander == no_irq_type:说明中断控制器不支持该IRQ线 if (desc->handler == &no_irq_type) ...
2、setup_irq函数 代码块如下: intsetup_irq(unsigned int irq,structirqaction*new) {/* 根据中断号找到对应的数组项 */structirq_desc*desc = irq_desc + irq;structirqaction*old, **p;constchar*old_name = NULL; unsigned long flags; int shared =0;if(irq >= NR_IRQS)return-EINVAL;if(desc-...
在linux定义的common_interrupt接口中,执行完中断执行环境建立后,会进入generic interrupt layer执行,其首先通过vector查找到irq和对应的irq_desc结构,并执行该结构的handle_irq接口,这个接口就是generic interrupt layer的通用逻辑接口,比如handle_edge_irq/handle_level_irq等;在中断执行的通用逻辑接口中,会通过irq_desc...