カーネルプログラミングを練習するために、単純なファイアウォールに似たカーネルモジュールを構築しようとしています。モジュールを複数のCファイルとヘッダーファイルに分割しようとしていますが、MODULE_LICENSE( "GPL")を使用してライセンスを定義しましたが、ビルドが完了せず、定義されたライセンスがないというエラーが発生します。私のメイクファイルは
obj-m += firewall.o
firewall-objs := fileio.o plstring.o rulemanager.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
カーネルモジュールを複数のファイルに分割する方法はありますか?各cファイルのライセンスを定義しようとしましたが、機能しません。
答え1
ここで私のMakefileを参照として使用できます。
INSTALL_DIR=modules
ifneq (${KERNELRELEASE},)
obj-m :=cdd107.o
cdd107-objs := init.o clean.o opendev.o allocdev.o writedev.o readdev.o seekdev.o
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
@rm -rf ${INSTALL_DIR}
@mkdir ${INSTALL_DIR}
@mv -f *.o *.ko *.mod.c .*.cmd ${INSTALL_DIR}
clean:
rm -rf ${INSTALL_DIR}
endif
ビルドはエラーなしで完了します。
参照ログ:-
make -C /lib/modules/4.4.0-31-generic/build M=/home/vijay/Downloads/intro modules
make[1]: Entering directory '/usr/src/linux-headers-4.4.0-31-generic'
CC [M] /home/vijay/Downloads/intro/init.o
CC [M] /home/vijay/Downloads/intro/clean.o
CC [M] /home/vijay/Downloads/intro/opendev.o
CC [M] /home/vijay/Downloads/intro/allocdev.o
CC [M] /home/vijay/Downloads/intro/writedev.o
CC [M] /home/vijay/Downloads/intro/readdev.o
CC [M] /home/vijay/Downloads/intro/seekdev.o
LD [M] /home/vijay/Downloads/intro/cdd107.o
Building modules, stage 2.
MODPOST 1 modules
CC /home/vijay/Downloads/intro/cdd107.mod.o
LD [M] /home/vijay/Downloads/intro/cdd107.ko
make[1]: Leaving directory '/usr/src/linux-headers-4.4.0-31-generic'
これがあなたに役立つことを願っています。