购买了韦老师的驱动大全,观看了中断部分的视频,有以下疑问烦请解答:
1、如图所示,按键设备想要使用gpio5的3号中断,则内核在解析按键的设备树时会根据设备树中指定的interrupt-parent找到gpio控制器驱动程序中注册的irq_domain,并通过irq_domain.ops的xlate函数解析按键设备树中的中断信息。而imx6ull的gpio控制器驱动程序注册是在内核解析设备树完成后才执行的。这不互相矛盾了吗?(内核想要调用gpio控制器驱动注册的irq_domain.ops的xlate函数,而此时gpio控制器驱动程序还未加载)
2、设备树解析和gpio控制器驱动程序执行顺序如下:
#define arch_initcall_sync(fn) __define_initcall(fn, 3s)
#define subsys_initcall(fn) __define_initcall(fn, 4)
设备树解析:通过arch_initcall_sync(of_platform_default_populate_init)调用;
imx6ull的gpio控制器驱动程序:通过subsys_initcall(gpio_mxc_init)调用;
可以看到内核解析设备树是在gpio控制器驱动程序加载之前执行。