解释下面makefile内容的意思
# Common part--------------------------------------------------------------------
DRV_NAME := xxx
DRV_PATH := xxxxx
# KBuild part of makefile--------------------------------------------------------
ifneq ($(KERNELRELEASE),)
obj-m := $(DRV_NAME).o
$(DRV_NAME)-objs += can_init.o
$(DRV_NAME)-objs += sja1000/sja1000.o
$(DRV_NAME)-objs += AAAA/AAAA.o
EXTRA_CFLAGS += -std=gnu99
# Normal makefile----------------------------------------------------------------
else
KVER := $(shell uname -r)
KSRC ?= /lib/modules/$(KVER)/build
KMOD ?= /lib/modules/$(KVER)/kernel/drivers/$(DRV_PATH)
all:
$(MAKE) -w -C $(KSRC) M=$(PWD) modules
这是一个 Linux 内核模块的 Makefile,用于构建一个名为 $(DRV_NAME)
的内核模块。让我解释一下每个部分的含义:
ifneq ($(KERNELRELEASE),)
:这是一个条件语句,检查是否在内核构建阶段。如果KERNELRELEASE
已定义,说明是在内核构建阶段,将执行下面的代码。obj-m := $(DRV_NAME).o
:定义了要构建的内核模块的目标文件。$(DRV_NAME)-objs += ...
:指定模块的源文件。这里包括can_init.o
、sja1000/sja1000.o
、AAAA/AAAA.o
。EXTRA_CFLAGS += -std=gnu99
:指定编译模块时要使用的额外编译标志,这里是将 C 语言标准设置为 GNU99。else
:如果不在内核构建阶段,执行下面的代码。-
KVER := $(shell uname -r)
:获取当前系统的内核版本。KSRC ?= /lib/modules/$(KVER)/build
:指定内核源代码的路径,默认为/lib/modules/$(KVER)/build
。KMOD ?= /lib/modules/$(KVER)/kernel/drivers/$(DRV_PATH)
:指定模块要安装的位置,默