Makefile KERNELDIR ?=/lib/modules/$(shell uname -r)/build ·?=:表示若KERNELDIR还未赋过值,则赋值 $(shell uname-r):获取当前内核版本号 Iib/modules/,$(shell uname-r)目录存放了各种 编译好的内核模块、符号信息等 build往往是一个符号链接,指向的目录包含了 内核头文件,用于编译内核模块的各个 Makefile PWD:$(shell pwd) ·保存当前目录
Makefile ◼ KERNELDIR ?= /lib/modules/$(shell uname -r)/build ◼ ?=:表示若KERNELDIR还未赋过值,则赋值 ◼ $(shell uname -r):获取当前内核版本号 ◼ /lib/modules/$(shell uname -r)目录存放了各种 编译好的内核模块、符号信息等 ◼ build往往是一个符号链接,指向的目录包含了 内核头文件,用于编译内核模块的各个 Makefile ◼ PWD := $(shell pwd) ◼ 保存当前目录
Makefile文件 ifneq ($(KERNELRELEASE),) obj-m PrintModule.o PrintModule ahis-DrirMirivarEilperations.0 EXTRA CFLAGS 执行default子句 else KERNELDIR modules/$(shell uname -r)/build PWD :=epwd) default: $(MAKE)-C $(KERNELDIR)M=$(PWD)modules endif
Makefile文件 ifneq ($(KERNELRELEASE),) obj-m := PrintModule.o PrintModule-objs := DriverMain.o DriverFileOperations.o EXTRA_CFLAGS := -DTEST_DEBUG -ggdb -O0 else KERNELDIR ?= /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) default: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules endif 执行default子句
Makefile $(MAKE)-C $(KERNELDIR)M=$(PWD) modules MAKE:执行make操作 C:切换目录到$(KERNELDIR) 此时,开始执行$(KERNELDIR)目录下的 Makefile(J顶层Makefile) 在该Makefile中,定义了KERNELRELEASE ■M:表示在构造模块之前,回到目录PWD,再 次执行当前目录下的Makefile
Makefile ◼ $(MAKE) -C $(KERNELDIR) M=$(PWD) modules ◼ MAKE:执行make操作 ◼ -C:切换目录到$(KERNELDIR) ◼ 此时,开始执行$(KERNELDIR) 目录下的 Makefile(顶层Makefile) ◼ 在该Makefile中,定义了KERNELRELEASE ◼ M:表示在构造模块之前,回到目录PWD,再 次执行当前目录下的Makefile
Makefile文件 ifneq ($(KERNELRELEASE),) obj-m :PrintModule.o tModule-obis :DriverMain.o DriverFileOperations.o EXTRA CH GS:=-DTEST_DEBUG-ggdb-00 else KERNELL (lib/modules/$(shell uname -r)/build PWD:=$(sh default: 检查Makefile中是否定义了 $(MAKE KERNELRELEASE: nodules endif 此时己定义
Makefile文件 ifneq ($(KERNELRELEASE),) obj-m := PrintModule.o PrintModule-objs := DriverMain.o DriverFileOperations.o EXTRA_CFLAGS := -DTEST_DEBUG -ggdb -O0 else KERNELDIR ?= /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) default: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules endif 检查Makefile中是否定义了 KERNELRELEASE; 此时已定义