【发布时间】:2012-01-09 09:27:58
【问题描述】:
我是编写 Linux 设备驱动程序的新手,我想知道内核 Makefile 如何神奇地知道要编译什么。为了说明我不明白的地方,请考虑以下案例:
我在我的驱动程序代码中做了一个#include <linux/irq.h>,我能够在内核目录KDIR/include/linux 中找到头文件irq.h。但是,这只是头文件,所以我认为irq.c 源代码一定在某个地方。因此,我查看了 KDIR/arch/arm 搜索 irq.c(因为我使用的是 ARM 架构)。当我在KDIR/arch/arm 中发现很多irq.c 时,我的困惑就从这里开始了。简单列举几个,我得到:
- KDIR/arch/arm/mach-at91/irq.c
- KDIR/arch/arm/mach-davinci/irq.c
- KDIR/arch/arm/mach-omap1/irq.c
- KDIR/arch/arm/mach-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之外,一定有办法知道这一点。感谢您的帮助!
【问题讨论】:
标签: makefile linux-kernel device-driver linux-device-driver kernel