回到系统枚举阶段的中断号映射过程,在of_amba_device_create()函数中,irq_of_parse_and_map()函数负责把硬件中断号映射到Linux内核的IRQ号 // 把硬件中断号映射到 Linux 内核的 IRQ 号 unsigned int irq_of_parse_and_map(struct device_node *dev, int index) { struct of_phandle_args oirq; if (of_...
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...
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...
irq = irq_of_parse_and_map(node, 0);//将一个子controller以普通中断加入到父节点,并映射之 gic_cascade_irq(gic_cnt, irq);//设置该irq_num下的级联flow 回调接口 }//级联使用,该gic须要将自己作为一个子irq来进行map操作 gic_cnt++; return 0; 该过程主要基于linux设备树,对当前machine支持的interrup...
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” 去...
extern unsigned int irq_create_of_mapping(struct of_phandle_args *irq_data); 通常,一个普通设备的device tree node已经描述了足够的中断信息,在这种情况下,该设备的驱动在初始化的时候可以调用irq_of_parse_and_map这个接口函数进行该device node中和中断相关的内容(interrupts和interrupt-parent属性)进行分析,并...
登录后复制unsignedintirq_of_parse_and_map(struct device_node *dev,intindex)//dev:设备节点//index:索引号,通过索引号来指定要获取的信息//返回值:中断号/***若使用GPIO中断,可以下函数来获取对应中断号***/intgpio_to_irq(unsignedintgpio)//gpio:要获取的GPIO编号//返回值:GPIO对应的中断号 审核编辑...
驱动中通常会使用platform_get_irq或irq_of_parse_and_map接口,去根据设备树的信息去创建映射关系(硬件中断号到linux irq中断号映射); 《Linux中断子系统(一)-中断控制器及驱动分析》提到过struct irq_domain用于完成映射工作,因此在irq_create_fwspec_mapping接口中,会先去找到匹配的irq domain,再去回调该irq domai...
设备的驱动在初始化的时候可以调用irq_of_parse_and_map等接口函数进行该device node中和中断相关的内容(interrupts和interrupt-parent属性)进行分析,并建立映射关系 举例 drivers/input/keyboard/cap11xx.c error=input_register_device(priv->idev);if(error)returnerror;irq=irq_of_parse_and_map(node,0);if(!
-> irq_of_parse_and_map(child,0);//将中断解析并映射到linux virq空间( -> of_node_get(child);//将OF节点与设备结构相关联 -> phy->dev.of_node = child; -> phy_device_register(phy)// 注册phy设备 ->if(phydev->bus->phy_map[phydev->addr])//判断PHY是否已经注册了 ...