irq_of_parse_and_map()->of_irq_parse_one():主要用于解析DTS文件中设备定义的属性,如reg、interrupts等, 最后把DTS中的interrupts的值存放在oirq->args[]数组中irq_of_parse_and_map()->irq_create_of_mapping->irq_create_fwspec_mapping(): unsigned int irq_create_fwspec_mapping(struct irq_fwspec ...
gpio_request(imx6uirq.irqkeydesc[i].gpio, name); gpio_direction_input(imx6uirq.irqkeydesc[i].gpio); imx6uirq.irqkeydesc[i].irqnum = irq_of_parse_and_map(imx6uirq.nd, i); #if 0 imx6uirq.irqkeydesc[i].irqnum = gpio_to_irq(imx6uirq.irqkeydesc[i].gpio); #endif printk("ke...
1.irq_of_parse_and_map unsignedintirq_of_parse_and_map(structdevice_node *dev,intindex) {structof_phandle_args oirq;//解析一个irq,读取其配置值if(of_irq_parse_one(dev, index, &oirq))return0;//获取映射后的irqreturnirq_create_of_mapping(&oirq); } 2.of_irq_parse_oneintof_irq_pars...
此可以通过 irq_of_parse_and_map 函数从 interupts 属性中提取到对应的设备号,函数原型如下: unsignedintirq_of_parse_and_map(structdevice_node *dev,intindex)函数参数和返回值含义如下: dev: 设备节点。 index:索引号, interrupts 属性可能包含多条中断信息,通过 index 指定要获取的信息。 返回值:中断号。
VMLINUX_SYMBOL(__irqchip_begin) = .; *(__irqchip_of_table) *(__irqchip_of_end) #endif 在内核启动初始化中断的函数中,of_irq_init 函数会去查找设备节点信息,该函数的传入参数就是 __irqchip_of_table 段,由于 IRQCHIP_DECLARE 已经将信息填充好了,of_irq_init 函数会根据 “arm,gic-v3” 去...
linux使用结构体struct irq_map_entry irq_map[NR_IRQS]完成软件与硬件的中断号映射,一般系统自动查找可用的软件号以对应请求的硬件中断号。 在使用open firmware的系统中,驱动程序在执行ruquest_irq之前要先进行软硬件中断号的映射,具体通过函数: irq_of_parse_and_map(struct device_node * dev, int index); ...
if (of_irq_parse_one(dev, index, &oirq))---分析device node中的interrupt相关属性 return 0; return irq_create_of_mapping(&oirq);---创建映射,并返回对应的IRQ number } 对于一个使用Device tree的普通驱动程序(我们推荐这样做),基本上初始化需要调用irq_of_parse_and_map获取IRQ number,然后调用requ...
<group of processors>.<processor>.<core>.<thread> 中断亲和性的设置的通用函数为 irq_set_affinity,后面会做详细介绍。 中断状态机 中断处理的状态机如下图: Inactive:无中断状态,即没有 Pending 也没有 Active。 Pending:硬件或软件触发了中断,该中断事件已经通过硬件信号通知到 GIC,等待 GIC 分配的那个 CPU...
驱动中通常会使用platform_get_irq或irq_of_parse_and_map接口,去根据设备树的信息去创建映射关系(硬件中断号到linux irq中断号映射); 《Linux中断子系统(一)-中断控制器及驱动分析》提到过struct irq_domain用于完成映射工作,因此在irq_create_fwspec_mapping接口中,会先去找到匹配的irq domain,再去回调该irq domai...
request_irq函数用于申请中断,但是可能会导致睡眠,因此不能在中断上下文或者其他禁止睡眠的代码段中使用request_irq函数。request_irq函数会使能中断,所以不需要我们手动去使能中断。 函数原型: int request_irq(unsigned int irq, irq_handler_t handler,