return irq_create_of_mapping(&oirq);---创建映射,并返回对应的IRQ number } 对于一个使用Device tree的普通驱动程序(我们推荐这样做),基本上初始化需要调用irq_of_parse_and_map获取IRQ number,然后调用request_threaded_irq申请中断handler。 (4)irq_create_direct_mapping。这是给no map那种类型的interrupt co...
此外,需要注意的是,在旧内核中,IRQ number和硬件的连接有一定的关系,但是,在引入irq domain后,IRQ number已经变成一个单纯的number,和硬件没有任何关系。 三、中断描述符数据结构 Notes:中断描述符irq_desc是用于描述一个中断的;irq_chip是中断控制器的callback函数;irq_data是描述中断控制器的,常挂在irq_desc下。
实际上,在共享的情况下,一个IRQ number对应若干个irqaction,当操作irqaction的时候,仅仅给出IRQ number就不是非常的足够了,这时候,需要一个ID表示具体的irqaction,这里就是dev_id的作用了。我们举一个例子: void free_irq(unsigned int irq, void *dev_id) 当释放一个IRQ资源的时候,不但要给出IRQ number,还...
int (*map)(struct irq_domain *d, unsigned int virq, irq_hw_number_t hw); void (*unmap)(struct irq_domain *d, unsigned int virq); int (*xlate)(struct irq_domain *d, struct device_node *node, const u32 *intspec, unsigned int intsize, unsigned long *out_hwirq, unsigned int *...
static irqreturn_t rtc_interrupt(int irq, void *dev_id) { /* * Can be an alarm interrupt, update complete interrupt, * or a periodic interrupt. We store the status in the * low byte and the number of interrupts received since
irqflags是中断处理的属性,若设置SA_INTERRUPT,标明中断处理程序是快速处理程序,快速处理程序被调用时屏蔽所有中断,慢速处理程序不屏蔽;若设置SA_SHIRQ,则多个设备共享中断,dev_id在中断共享时会用到,一般设置为这个设备的device结构本身或者NULL。 free_irq()的原型为: ...
设备树的节点信息,最终会变成device_node结构,在内存中维持一个树状结构; 设备与驱动,会根据compatible字段进行匹配; 3.2 驱动流程分析 GIC驱动的执行流程如下图所示: 首先需要了解一下链接脚本vmlinux.lds,脚本中定义了一个__irqchip_of_table段,该段用于存放中断控制器信息,用于最终来匹配设备; ...
or_irq_init 函数中,最终会回调 IRQCHIP_DECLARE 声明的回调函数,也就是 gic_of_init,而这个函数就是 GIC 驱动的初始化入口。 2. gic_of_init 流程: 复制 static int __init gic_of_init(struct device_node *node, struct device_node *parent){...dist_base=of_iomap(node, 0); ---(1)if (!
static int nxp_key_probe(struct platform_device *pdev) { ... printk("~~~ %s() gpio:%d, irqno:%d, call request_irq()\n", \ __func__, code->io, gpio_to_irq(code->io)); ret = request_irq(gpio_to_irq(code->io), nxp_key_irqhnd, (IRQF_SHARED | IRQ_TYPE_EDGE_BOTH), ...
int request_irq(unsigned int irq , void(*handle)(int,void *,struct pt_regs *), unsigned int long flags, const char *device); 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. irq: 是要申请的中断。 handle:中断处理函数指针。 flags:SA_INTERRUPT 请求一个快速中断,0 正常中断。