我是新編寫的Linux設備驅動程序,我想知道內核Makefile
如何神奇地知道要編譯什麼。爲了說明什麼,我不明白,請考慮以下情況:內核Makefile如何神奇地知道要編譯什麼?
我在驅動程序代碼做了#include <linux/irq.h>
,我能找到在內核目錄KDIR/include/linux
頭文件irq.h
。但是,這只是頭文件,所以我認爲irq.c
源代碼必須在某處。因此,我研究了KDIR/arch/arm
搜索irq.c
(因爲我使用ARM架構)。當我在KDIR/arch/arm
內發現了很多irq.c
時,我的困惑就從這裏開始。如果只列出了幾下,我得到:
- KDIR /弓/ ARM /馬赫AT91/irq.c
- KDIR /弓/ ARM /馬赫 - 達芬奇/ irq.c
- KDIR /弓/arm/mach-omap1/irq.c
- KDIR /弓/ ARM /馬赫orion5x/irq.c
- 更多...
在我Makefile
,我有一個這樣的行:
$(MAKE) -C $(KDIR) M=$(PWD) CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm modules
所以我知道內核Makefile
知道我在使用ARM架構,但在KDIR/arch/arm/
下有很多irq.c
具有相同的名稱。我猜測mach-davinci/irq.c
是編譯的,因爲davinci是我使用的CPU名稱。但是,那麼內核Makefile
怎麼知道這是編譯的呢?或者,如果我想查看我實際使用的irq.c
,我應該參考哪一個?
我相信除了閱讀長內核Makefile
之外,還必須有一種方法來了解這個。謝謝你的幫助!
感謝您的回答和鏈接!我會看看.. –