2014-03-13 33 views
0

我只是通過下面的線程說,內核頭文件不想公開irq的模塊。爲什麼內核頭文件不想公開irq的模塊?

Accessing IRQ description array within a module and displaying action names

,但我不知道爲什麼會這樣呢?

此外,我看到一些不使用irq的驅動程序,這是否意味着這些設備不是interuppt驅動?

這樣的驅動程序之一是針對lm73傳感器linux/drivers/hwmon/lm73.c,它主要綁定到i2c總線並且又是一個模塊。

那麼,這是怎麼回事,設備如何選擇不被中斷驅動?

+0

lm73只是插在i2c子系統的頂部,而i2c驅動程序(其中有很多不同的變體)很可能是中斷驅動的。 – nos

+0

@nos但是應該有一些方法讓設備也可以中斷它的總線。不是這種情況嗎? –

+0

也許吧。這取決於子系統。如果你正在編寫一個位於i2c層之上的模塊,你應該調用i2c層定義的函數。而且,如果需要,該層將負責處理總線,無論是否需要中斷。這樣你就不會被綁定到任何特定的i2c芯片。 lm73模塊就是這種情況,它是i2c總線遠端傳感器的驅動程序,它不需要知道i2c總線的本地端如何工作,只要它能發送消息到另一端。 – nos

回答

1

您可以在模塊中使用IRQ數字。這個問題有兩個概念:一個是IRQ descripton,這是Linux內核管理中斷的用途。

IRQ號碼本身用於任何具有request_threaded_irq()和其功能的模塊。通常,驅動程序通過platform_data或設備樹傳遞IRQ數字。

可能不會在一個模塊中使用IRQ描述(我不知道你爲什麼想)。更準確地說,不允許將IRQ號碼轉換爲模塊中的IRQ描述。通常,描述只是一個由IRQ編號索引的大型數組,因此irq_to_desc()在某些情況下是宏,並且從不導出。

+0

感謝@artlessnoise並剛剛通過答案。我在這裏有一個疑問,我看到在我的環境中使用request_threaded_irq()而不是request_irq()的大部分模塊都有相同的特定原因嗎? –

+0

只是''request_threaded_irq()'是更新的版本,允許快速的第一部分後跟第二個'螺紋'部分。最初的'request_irq()'只是爲* thread *傳遞NULL。 –