ch2_ab1 Linux内核模块

发布时间 2023-08-29 16:52:46作者: 诸葛蛋蛋

准备事项:

虚拟机 系统 文件传输工具
VMware CentOS Winscp
VitualBox Ubuntu Xftp
有222种选择,我是Virtualbox+Ubuntu+Winscp

obj-m += simple.o
all:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

这段代码看起来是一个 Linux 内核模块的构建和编译过程。让我为你解释一下每个部分的作用:

1. `obj-m += simple.o`:
   这一行将一个名为 `simple.o` 的目标文件添加到 `obj-m` 变量中。这指示构建系统在编译时将 `simple.o` 连接到内核模块中。

2. `all:`:
   这是一个目标名称,表示默认的构建目标。也就是说,当你运行 `make` 命令而不指定目标时,它会执行这个目标下的命令。

3. `make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules`:
   这条命令会调用 `make` 命令,进入到内核源码目录下(`/lib/modules/$(shell uname -r)/build`),并使用当前目录下的 Makefile(`M=$(PWD)`)来构建模块(`modules`)。这会编译和链接 `simple.o` 并生成内核模块文件。

4. `clean:`:
   这是一个目标名称,用于清理构建过程产生的临时文件。

5. `make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean`:
   这条命令会在内核源码目录下执行 `make` 命令,使用当前目录下的 Makefile(`M=$(PWD)`),并执行 `clean` 目标。这将清除构建过程中生成的临时文件和输出文件,以便进行干净的构建。

综合起来,这个 Makefile 的作用是编译和构建一个名为 `simple.o` 的内核模块,并提供了 `all` 和 `clean` 两个目标,分别用于构建和清理操作。执行 `make` 命令会默认执行 `all` 目标的命令,编译生成内核模块,而执行 `make clean` 命令会清理构建产生的临时文件和输出文件。