Linux内核2.6 Makefile详解及关键概念

需积分: 3 2 下载量 198 浏览量 更新于2024-08-01 收藏 68KB DOC 举报
"这篇文章主要介绍了Linux 2.6内核的Makefile规则,这对于开发设备驱动和理解内核代码结构至关重要。Linux内核的Makefile系统由多个层次组成,包括顶层Makefile、特定架构的Makefile、配置文件(.config)以及scripts目录下的通用规则文件。在文档中,详细解释了Kbuild文件的不同方面,如目标定义、编译进内核的模块、可装载模块的处理、符号输出、目标库文件、递归编译、编译标志、依赖关系跟踪等。此外,还涵盖了本地程序的支持、Kbuild的清理过程、针对特定架构的定制以及Makefile中的变量和语言使用。" 在Linux内核开发中,`makefile`扮演着核心角色,它负责编译和链接内核及模块。以下是关键知识点的详细说明: 1. **目标定义**:在Makefile中,目标通常代表需要编译的源文件或需要生成的文件。例如,`obj-y`用于指定要编译进内核的目标,而`obj-m`则用于可装载模块。 2. **编译进内核的obj-y**:这部分规则定义了哪些源文件会被编译成内核的一部分。当`make`命令执行时,这些源文件会经过预处理、编译、汇编,最终链接到内核映像中。 3. **编译可装载模块的obj-m**:这些是作为动态加载模块的源文件,可以在运行时通过`insmod`或`modprobe`命令插入到内核中。 4. **输出的符号**:Makefile还管理哪些符号(全局变量和函数)需要导出,以便模块可以使用。 5. **目标库文件(-lib-y)**:这些规则用于创建静态库或共享库,它们可以被内核或模块使用。 6. **递归编译**:在复杂的源码树中,Makefile会递归地访问子目录,确保所有源文件都被正确处理。 7. **编辑标志**:Makefile可以设置编译器和链接器的选项,如优化级别、调试信息等。 8. **依赖关系跟踪**:Makefile能自动识别源文件之间的依赖关系,确保在源文件改变时,相应的目标文件能得到更新。 9. **本地程序支持**:除了内核和模块,Makefile还处理本地程序的编译,包括C++程序,并允许控制编译选项。 10. **架构Makefile**:每个架构都有其特定的Makefile,用于处理架构特有的编译和链接任务,如生成启动镜像。 11. **Kbuild变量**:这些变量定义了构建过程中的各种参数,如编译路径、目标类型等,可以根据需要进行定制。 12. **Makefile语言**:理解Makefile语法和规则对于有效编写和维护Makefile至关重要。 Linux内核的Makefile规则是一个复杂而精细的系统,它确保了内核及其组件的构建过程能够高效、正确地进行。对这些规则的深入理解对于任何想要参与Linux内核开发的人来说都是必不可少的。