我正在编写一个内核模块,用于为ARM + FPGA SOC系统功能测试设备驱动程序内核模块。我的方法是通过查询设备树来查找设备驱动程序正在使用的中断。在设备驱动程序本身中,我使用platform_driver_register
注册平台驱动程序,在.probe
函数中,我传递了一个包含platform_device*
指针的device
指针。有了这个,我可以调用of_match_device
和irq_of_parse_and_map
,检索irq数字。
我不想仅仅为了在测试模块中以这种方式查询设备树而注册第二个平台驱动程序。有没有其他方法可以查询设备树(可能更直接,或许通过名称?)
答案 0 :(得分:2)
这是我到目前为止所发现的,它似乎有效。 of_find_compatible_node
做我想做的事。获得device_node*
后,我可以调用irq_of_parse_and_map
(因为of_irq_get_byname
似乎不能为我编译)。我可以使用类似下面的内容:
#include <linux/of.h>
#include <linux/of_irq.h>
....
int get_dut_irq(char* dev_compatible_name)
{
struct device_node* dev_node;
int irq = -1;
dev_node = of_find_compatible_node(NULL, NULL, dev_compatible_name);
if (!dev_node)
return -1;
irq = irq_of_parse_and_map(dev_node, 0);
of_node_put(dev_node);
return irq;
}