如何使用多个c文件构建linux内核模块?

如何使用多个c文件构建linux内核模块?

我正在尝试构建一些类似于简单防火墙的内核模块来练习内核编程。我正在尝试将我的模块拆分为多个 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'

我希望这对你有帮助。

相关内容