作者:王劲南,华清远见嵌入式学院讲师。
先看一下代码
ifeq ($(KERNELRELEASE),)
KERNELDIR ?= /home/linux/linux-2.6.22.6
PWD := $(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
clean:
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
.PHONY: modules modules_install clean
else
obj-m := myhello.o
endif
其中有一些是我们常见或是见过的,第一个ifeq ($(KERNELRELEASE),)目前,并无用处,它的由来是指在Linux源码根目录下的Makefile编译内核时,KERNELRELEASE宏会被定义,那么如果是从源码根目录开始的make则会将myhello.o模块编译进内核。
KERNELDIR ?= /home/linux/linux-2.6.22.6,这句是对KERNELDIR进行赋值,这个变量是后面我们用到的指代内核源码目录用的。
PWD := $(shell pwd),这句是对PWD变量进行赋值,作用是将$(shell pwd)的返回结果既求得当前目录的路径赋值给PWD,这个变量我们在后面指代我们要编译的驱动程序所在的位置。
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
这句是Makefile的规则:这里的$(MAKE)就相当于make,-C 选项的作用是指将当前工作目录转移到你所指定的位置。“M=”选项的作用是,当用户需要以某个内核为基础编译一个外部模块的话,需要在make modules 命令中加入“M=dir”

本文由王劲南,华清远见嵌入式学院讲师撰写,详细解析了驱动模块的Makefile内容,包括ifeq ($(KERNELRELEASE),)、KERNELDIR变量、PWD变量、编译模块的规则以及模块安装的规则。文中还提到了.PHONY目标的作用,以防Makefile工作中出现错误。"
121482551,7800548,R语言嵌套ifelse语句详解,"['R语言', '数据分析', '编程逻辑']
3万+

被折叠的 条评论
为什么被折叠?



