基本语法
?=
1 | ARCH ?= arm |
:=
:= 代表着即时赋值,而=可以用于延迟赋值, 以下的例子特别直观
1 | NOW := $(shell date) # Immediate assignment |
include
可以通过include来引用其他目录下的makefile及配置
1 | include scripts/$(BOARD_TYPE)/config.$(BOARD_TYPE) |
@的作用
把@写在makefile语句前时,该语句本身在执行make时不会打印, 仅仅打印该语句执行的结果
1 | all: |
1 | Building project... |
我们自己应该如何制作驱动呢? 换言之我们自己应该如何编译出ko文件呢?
其实很简单
1 | $(MAKEARCH) -C $(KERNELPATH) M=$(PATHTOMODULE) modules |
-C $(KERNELPATH) 指的是进入linux kernel所在的路径, 这个路径底下代表的是已经编译成功的linux kernel.
要使驱动成功加载到kernel下, 我们首先就要让驱动认识这个kernel, 所以需要指定kernel的路径.
(单独编译driver的源码是不行的哟 😭)
M=$(PATHTOMODULE) 指的是Module的路径也就是driver的源码路径
modules 最后一个modules目的是告诉编译器要进行的是driver的编译