linux kernel makefile详解
时间: 2023-10-04 20:07:37 浏览: 66
Linux kernel的Makefile是一个非常复杂的文件,它包含了许多规则和变量,以便为不同的架构和配置生成可执行文件和内核镜像。下面是一个简单的Makefile示例,用于编译一个简单的内核模块:
```makefile
obj-m := mymodule.o
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
$(MAKE) -C $(KERNELDIR) M=$(PWD) clean
```
下面是这个Makefile的解释:
- 第一行定义了要编译的目标文件名(即内核模块名)。
- `KERNELDIR`变量指定了内核源码的位置,默认为当前系统内核源码的位置。
- `PWD`变量指定了当前目录。
- `default`规则使用`$(MAKE)`命令调用内核源码目录中的Makefile,将当前目录设置为模块的源码目录,并使用`modules`目标编译模块。
- `clean`规则同样使用`$(MAKE)`命令调用内核源码目录中的Makefile,并使用`clean`目标清除模块的编译输出文件。
在这个简单的Makefile中,我们使用了许多内核Makefile的约定和规则,例如定义了`obj-m`变量来指定要编译的目标文件,使用`$(MAKE)`来调用内核源码目录中的Makefile等。对于更复杂的内核模块或内核配置,需要更详细的Makefile规则和约定。
总的来说,Linux kernel的Makefile是一个非常复杂的文件,需要深入了解内核源码和Makefile的使用才能编写正确的规则和变量。