2014-11-05 57 views
2

我正在編寫一個內核模塊,用於在功能上測試ARM + FPGA SOC系統的設備驅動程序內核模塊。我的方法涉及通過查詢設備樹來查找設備驅動程序正在使用哪個中斷。在設備驅動程序本身中,我註冊了使用platform_driver_register的平臺驅動程序,並在.probe函數中傳遞了包含device指針的platform_device*指針。有了這個,我可以撥打of_match_deviceirq_of_parse_and_map,檢索irq號碼。我可以在不創建平臺設備的情況下查詢設備樹項目嗎?

我不想註冊第二個平臺驅動程序,只是在測試模塊中以這種方式查詢設備樹。有沒有其他的方式可以查詢設備樹(也許更直接的名稱,也許更?)

+0

你知道它在哪個總線上嗎?如果是這樣的話,你可以使用[subsys_dev_iter_init](http://lxr.free-electrons.com/source/drivers/base/bus.c#L1060)和subsys_dev_iter_next遍歷總線,並獲得設備指針的句柄 – harmic 2014-11-06 10:48:16

+0

根據設備樹,它在sopc總線上。 – benf 2014-11-06 18:49:21

+0

檢查http://stackoverflow.com/a/40928373/2007944 – 2016-12-02 09:09:30

回答

1

這是我迄今爲止發現,它似乎工作。 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; 
} 
相關問題