ツリーから構築している 2 つのカーネル ローダブル モジュールの設計があります。これらのモジュールは、独立して実行することも、両方がロードされたときに一緒に動作する (互いのサービスを使用する) こともできます。
したがって、funcA と funcB を含む module1.ko があります。funcC と funcD を含む module2.ko もあります。module1.ko が単独でロードされる場合、単純に funcA と funcB が使用されます。でも、module2.koもロードするなら、module1.koでもfuncCが使えるようにしたいです。
module1.ko が module2.ko がロードされているかどうかを検出して、funcC を使用できるかどうかを知るにはどうすればよいですか?
また、Linux カーネルの外部でこれらのモジュールを両方ともビルドしているため、ビルド時に Makefile を更新してこの条件付き依存関係を追加するにはどうすればよいですか?
私の Makefile は現在、次のようになっています。
MODULE_NAME=module1
SOURCE_FILES=module1_driver.c
CROSS_COMPILER=powerpc-timesys-linux-gnu-
ARCH=powerpc
ifneq ($(KERNELRELEASE),)
obj-m := $(MODULE_NAME).o
$(MODULE_NAME)-objs := $(SOURCE_FILES:.c=.o)
ccflags-y := -I$(src)/../common
sinclude $(TOPDIR)/Rules.make
else
KERNELDIR ?= ../../linux/2.6-xlnx-rt
PWD := $(shell pwd)
default:
$(MAKE) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILER) -C $(KERNELDIR) M=$(PWD) modules
clean:
$(MAKE) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILER) -C $(KERNELDIR) M=$(PWD) clean
rm -rf ../common/*.o module1_test
endif