커널 프로그래밍을 연습하기 위해 간단한 방화벽과 유사한 커널 모듈을 구축하려고 합니다. 모듈을 여러 개의 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'
이것이 당신에게 도움이 되기를 바랍니다.