Вопрос такой. Есть небольшой драйвер, который собирается примерно таким Makefile-ом:
Код
...
KERNEL_DIR := $(LINUX_C6X_TOP_DIR)/Build/kobjs/my_kernel
ROOTFS_DIR := $(LINUX_C6X_TOP_DIR)/Build/rootfs/kernel-modules-$(ARCH)
INCVER := ../../IncVer/incver
# /lib/modules/$(CURRENT)/build
PWD = $(shell pwd)
obj-m := my_driver.o
my_driver-y := driver.o
module:
$(MAKE) -C $(KERNEL_DIR) M=$(PWD) modules
$(INCVER) version.h
install:
$(MAKE) -C $(KERNEL_DIR) M=$(PWD) INSTALL_MOD_PATH=$(ROOTFS_DIR) modules_install
...
Решил приделать нумератор сборок к нему и написал простенькую утилитку incver, которая парсит хидер и добавляет единичку к define-у, отвечающему за номер сборки. Запускаю ее после успешной сборки самого модуля.
В целом все хорошо, номерок тикает, но вот напрягает то, что сборка выполняется всякий раз, когда я дергаю make и в итоге номер сборки меняется при каждой сборке, даже если ничего не поменялось в исходниках.
Вопрос заключается в том, можно ли как-нибудь добиться такой ситуации, чтобы номер сборки увеличивался только при действительно произошедшей сборке?
Чисто теоретически понятно, что надо написать явную зависимость my_driver.ko от всех .o $(my_driver-y) и выполнять $(MAKE) -C $(KERNEL_DIR) M=$(PWD) modules не в таргете module, а в таргете my_driver.ko. Однако тут все же есть такой нюанс, что при изменении чего-нибудь в самом ядре драйвер тоже может потребовать пересборки, так как бинарник из-за этого поменяется. И тогда вопрос звучит так: можно ли что-то из ядра включить в зависимость к my_driver.ko или проще забить и следить только за своими исходниками?