:=
表示直接赋值,赋予当前位置的值。
+=
表示将等号后面的值添加到前面的变量上。
?=
表示如果该变量没有被赋值,则赋予等号后的值。
需要在同一个Makefile
文件中要编译两个内核驱动模块,每个驱动依赖多个源文件,实现方法如下所示。
obj-m := module_01.o module_02.o
module_01-y := file_01.o file_02.o
module_02-y := file_03.o file_04.o
也可以下面这样写
obj-m += module_01.o
obj-m += module_02.o
module_01-y += file_01.o
module_01-y += file_02.o
module_02-y += file_03.o
module_02-y += file_04.o
注意事项:低版本Make工具链模块名不能与依赖-y文件同名,如下所示:
obj-m := module_01.o
module_01-y := module_01.o
使用实例:
BASEINCLUDE ?= /lib/modules/`uname -r`/build
obj-m += kprobe.o
obj-m += kretprobe.o
kprobe-y := kprobe_example.o
kretprobe-y := kretprobe_example.o
all :
$(MAKE) -C $(BASEINCLUDE) M=$(PWD) modules;
clean:
$(MAKE) -C $(BASEINCLUDE) M=$(PWD) clean;
rm -f *.ko;
curtis@curtis-PC:~/work/write_code/kmodule/kprobe_example$ ll
总用量 24
-rw-r--r-- 1 curtis curtis 2087 2月 14 07:51 example.c
-rwxr-xr-x 1 curtis curtis 353 2月 14 07:51 hello_world.c
-rw-r--r-- 1 curtis curtis 3139 2月 14 07:51 kprobe_example.c
-rw-r--r-- 1 curtis curtis 3074 2月 14 07:51 kretprobe_example.c
-rwxr-xr-x 1 curtis curtis 272 2月 26 11:19 Makefile
-rw-r--r-- 1 curtis curtis 1688 2月 14 07:51 test_args_pass.c
curtis@curtis-PC:~/work/write_code/kmodule/kprobe_example$ make
make -C /lib/modules/`uname -r`/build M=/home/curtis/work/write_code/kmodule/kprobe_example modules;
make[1]: 进入目录“/usr/src/linux-headers-5.15.77-amd64-desktop”
warning: the compiler differs from the one used to build the kernel
The kernel was built by: gcc (Uos 8.3.0.6-1+dde) 8.3.0
You are using: gcc (Uos 8.3.0.3-3+rebuild) 8.3.0
CC [M] /home/curtis/work/write_code/kmodule/kprobe_example/kprobe_example.o
LD [M] /home/curtis/work/write_code/kmodule/kprobe_example/kprobe.o
CC [M] /home/curtis/work/write_code/kmodule/kprobe_example/kretprobe_example.o
LD [M] /home/curtis/work/write_code/kmodule/kprobe_example/kretprobe.o
MODPOST /home/curtis/work/write_code/kmodule/kprobe_example/Module.symvers
CC [M] /home/curtis/work/write_code/kmodule/kprobe_example/kprobe.mod.o
LD [M] /home/curtis/work/write_code/kmodule/kprobe_example/kprobe.ko
CC [M] /home/curtis/work/write_code/kmodule/kprobe_example/kretprobe.mod.o
LD [M] /home/curtis/work/write_code/kmodule/kprobe_example/kretprobe.ko
make[1]: 离开目录“/usr/src/linux-headers-5.15.77-amd64-desktop”
curtis@curtis-PC:~/work/write_code/kmodule/kprobe_example$ ll
总用量 1824
-rw-r--r-- 1 curtis curtis 2087 2月 14 07:51 example.c
-rwxr-xr-x 1 curtis curtis 353 2月 14 07:51 hello_world.c
-rw-r--r-- 1 curtis curtis 3139 2月 14 07:51 kprobe_example.c
-rw-r--r-- 1 curtis curtis 228744 2月 26 11:19 kprobe_example.o
-rw-r--r-- 1 curtis curtis 334920 2月 26 11:19 kprobe.ko # 第一个模块
-rw-r--r-- 1 curtis curtis 70 2月 26 11:19 kprobe.mod
-rw-r--r-- 1 curtis curtis 634 2月 26 11:19 kprobe.mod.c
-rw-r--r-- 1 curtis curtis 107744 2月 26 11:19 kprobe.mod.o
-rw-r--r-- 1 curtis curtis 228752 2月 26 11:19 kprobe.o
-rw-r--r-- 1 curtis curtis 3074 2月 14 07:51 kretprobe_example.c
-rw-r--r-- 1 curtis curtis 233456 2月 26 11:19 kretprobe_example.o
-rw-r--r-- 1 curtis curtis 339712 2月 26 11:19 kretprobe.ko # 第二个模块
-rw-r--r-- 1 curtis curtis 73 2月 26 11:19 kretprobe.mod
-rw-r--r-- 1 curtis curtis 634 2月 26 11:19 kretprobe.mod.c
-rw-r--r-- 1 curtis curtis 107768 2月 26 11:19 kretprobe.mod.o
-rw-r--r-- 1 curtis curtis 233464 2月 26 11:19 kretprobe.o
-rwxr-xr-x 1 curtis curtis 272 2月 26 11:19 Makefile
-rw-r--r-- 1 curtis curtis 127 2月 26 11:19 modules.order
-rw-r--r-- 1 curtis curtis 0 2月 26 11:19 Module.symvers
-rw-r--r-- 1 curtis curtis 1688 2月 14 07:51 test_args_pass.c