介绍

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 选项,表示将模块编译到内核、编译成外部内核模块、不进行编译。

交叉编译四要素

  1. ARCH
  2. CROSS_COMPILE
  3. -C
  4. 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