Я новичок в написании драйверов устройств Linux, и мне интересно, как ядро Makefile
волшебным образом знает, что компилировать.Чтобы проиллюстрировать то, что я не понимаю, рассмотрим следующий случай:
Я сделал #include <linux/irq.h>
в своем коде драйвера и смог найти заголовочный файл irq.h
в каталоге ядра KDIR/include/linux
,Однако это только заголовочный файл, поэтому я подумал, что исходный код irq.c
должен быть где-то там.Поэтому я посмотрел на KDIR/arch/arm
в поисках irq.c
(поскольку я использую архитектуру ARM).Мое замешательство начинается здесь, когда я обнаружил очень много irq.c
внутри KDIR/arch/arm
.Чтобы просто перечислить несколько, я получил:
- KDIR / arch / arm / mach-at91 / irq.c
- KDIR / arch / arm / mach-davinci / irq.c
- KDIR / арка / кронштейн / mach-omap1 / irq.c
- KDIR / арка / кронштейн / 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 - это имя процессора, которое я использую.Но тогда как ядро Makefile
может знать, что это то, что нужно скомпилировать?Или, если я хотел бы взглянуть на irq.c
, который я на самом деле использую, на какой мне следует ссылаться?
Я считаю, что должен быть способ узнать это, кроме чтения длинного ядра Makefile
.Спасибо за любую помощь!