2017-03-27 134 views
0

我在dragonboard410c工作具有內核模塊wcn36xx哪些寄存器是這樣的:中斷處理程序未註冊

static const struct of_device_id wcn36xx_of_match[] = { 
    { .compatible = "qcom,wcnss-wlan" }, 
    {} 
}; 
MODULE_DEVICE_TABLE(of, wcn36xx_of_match); 

static struct platform_driver wcn36xx_driver = { 
    .probe  = wcn36xx_probe, 
    .remove  = wcn36xx_remove, 
    .driver   = { 
     .name = "wcn36xx", 
     .of_match_table = wcn36xx_of_match, 
    }, 
}; 
module_platform_driver(wcn36xx_driver); 

我想寫我自己的內核模塊,也註冊到同一個設備,我的代碼:

static const struct of_device_id my_interrupt_of_match[] = { 
    { .compatible = "qcom,wcnss-wlan" }, 
    {} 
}; 
MODULE_DEVICE_TABLE(of, lab2_interrupt_of_match); 
static struct platform_driver my_driver = { 
    .driver= { 
    .name = "my_interrupt", 
    .of_match_table = my_interrupt_of_match, 
    }, 
    .probe = my_probe, 
    .remove = my_remove, 
}; 

在初始化函數註冊我的司機:

int err = platform_driver_register(&my_driver);

但我的探測功能沒有被調用。 我的模塊在啓動時自動加載,並調用init函數。

我建立我的模塊中的目錄外的內核代碼,我把lab2_interrupt.ko在黑板上的相同目錄wcn36xx.ko:

/lib/modules/4.4.23-linaro-lt -qcom/kernel/drivers/net/wireless/ath/wcn36xx/

回答

1

我想這是因爲相應的平臺設備已經在原始的wcn36xx_driver平臺驅動程序中註冊過了。

您應該在您的內核構建禁用它,或者如果它被構建爲一個模塊,你可以加載你的lab2_interrupt驅動程序之前,modprobe -r wcn36xx卸載它,或者你甚至可以黑名單它完全阻止它在加載首先加入這樣一行/etc/modprobe.d/blacklist

blacklist wcn36xx 
+0

它可以像你寫的那樣工作。當wcn36xx沒有註冊時,我的模塊可以註冊並且它的探測功能被調用。那麼總是可以只註冊一個設備的驅動程序? – dafnahaktana

+1

@dafnahaktana您可以註冊一個設備的多個驅動程序,但只有一個會「贏」。可以覆蓋平臺設備的驅動程序,然後解除綁定並重新探測。請參閱https://www.redhat.com/archives/libvir-list/2014-April/msg00382.html –

相關問題