内核编译选项介绍
介绍
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
-C 选项是将当前工作目录转移到指定目录
M= 选项是当用户需要以某个内核为基础编译一个外部模块时,需要指定 M=dir,程序会自动到你指定的 dir 目录中查找模块源码,将其编译,生成 ko 文件。
M=$(PWD) 意思是返回到当前目录继续读入、执行当前的 Makefile。
M 与 SUBDIRS 的区别
$(MAKE) -C $(KDIR) M=$(PWD)
与 $(MAKE) -C $(KDIR) SUBDIRS=$(PWD)
的作用是等效的,后者是较老的使用方法,推荐使用 M 而不是 SUBDIRS,前者更明确。
ARCH
用 ARCH 定义目标 CPU 的体系结构,比如 ARCH := arm;许多子目录的 Makefile 中,需要根据 ARCH 的定义选择编译源文件的列表。
obj-y、obj-m、obj-n
分别对应 make menuconfig 中的 *
m
空
选项,表示将模块编译到内核、编译成外部内核模块、不进行编译。
交叉编译四要素
- ARCH
- CROSS_COMPILE
- -C
- M=
ARCH=arm64
CROSS_COMPILE=hosttools/toolchain/aarch64-buildroot-linux-gnu/bin/aarch64-buildroot-linux-gnu-
-C linux/linux-mt
M=wifi_driver/os/linux