Makefile编写规则

1
2
3
4
5
KDIR := /lib/modules/$(shell uname -r)/build
pwd := $(shell pwd)
obj-m := helloworld.o
all:
make -C $(KDIR) M=$(PWD) modules
KDIR := /lib/modules/$(shell uname -r)/build

这行代码是一个 Makefile 中的变量赋值语句,用于指定内核源码的路径。

  1. KDIR 是一个变量,用于存储内核源码的路径。
  2. := 操作符用于进行变量的赋值,它会立即展开变量的值。
  3. /lib/modules/$(shell uname -r)/build 是一个路径,它使用了 $(shell uname -r) 命令来获取当前系统正在运行的内核版本,并将其用于构建内核源码的路径。
    因此,这行代码的作用是定义一个变量 KDIR,并将其设置为当前系统正在运行的内核版本对应的内核源码路径。通常,这个路径会是 /lib/modules/当前内核版本/build。
    1
    pwd := $(shell pwd)

这行代码是一个 Makefile 中的变量赋值语句,用于获取当前工作目录的路径并将其存储在一个变量中。

  1. pwd 是一个变量名,它用于存储当前工作目录的路径。
  2. := 操作符用于进行变量的赋值,它会立即展开变量的值。
  3. $(shell pwd) 是一个命令替换,它会执行 pwd 命令以获取当前工作目录的路径,并将其返回作为变量的值。
    因此,这行代码的作用是定义一个变量 pwd,并将其设置为当前工作目录的路径。
    1
    obj-m := helloworld.o
    这行代码是一个 Makefile 中的变量赋值语句,用于指定要编译的内核模块的源文件。
  4. obj-m 是一个内核模块编译时的特殊变量,它告诉内核构建系统需要编译的模块。
  5. := 操作符用于进行变量的赋值,它会立即展开变量的值。
  6. helloworld.o 是要编译的内核模块的源文件。这意味着在当前目录下应该有一个名为helloworld.c或者 helloworld.cpp 的源文件,它将被编译成名为helloworld.o的目标文件,作为一个内核模块进行加载。
    通常,obj-m 变量用于告诉内核构建系统要编译哪些模块。每个模块都会对应一个 .o 文件,这些文件最终会被链接到内核中,成为可加载的内核模块。
    1
    make -C $(KDIR) M=$(PWD) modules
    这个命令是一个 make 命令,用于在指定的内核源码目录 ($(KDIR)) 中编译当前目录 ($(PWD)) 下的模块。这通常用于编译 Linux 内核模块。
    具体来说:
  7. make 是一个构建工具,用于执行 Makefile 中定义的规则。
  8. -C $(KDIR) 指定了要进入的目录,即内核源码目录。
  9. M=$(PWD) 指定了要编译的模块所在的目录,即当前目录。
  10. modules 是 Makefile 中的一个目标,表示要编译模块。s
    因此,这个命令会进入内核源码目录,执行内核源码目录中的 Makefile 中的规则,编译当前目录下的模块。

Makefile编写规则
http://example.com/2024/03/20/Makefile编写规则/
作者
ZYBPP
发布于
2024年3月20日
许可协议