第7章 配置编译内核
7.2.2 内核配置系统
1.Makefile
Linux内核的配置编译都是由顶层目录的Makefile整体管理的。顶层目录的Makefile定义了配置和编译的规则
2.配置工具
scripts目录下提供了各种内核配置工具
3.Kconfig
Kconfig文件时Linux2.6内核引入的配置文件,是内核配置选项的源文件
7.2.3 Kbuild Makefile
1.Makefile的组织结构
.config 内核配置文件
arch/$(ARCH)/Makefile 对应体系结构的Makefile
scripts/Makefile.* 所有看build Makefile的通用规则等定义
看build Makefiles 内核编译各级目录下的Makefile
顶层目录的makefile负责编译vmlinux(常驻内存的内存映像)和module(任何模块文件)
Kbuild大体上按照下列步骤执行编译过程
(1)内核配置,生成.config文件
(2)保存内核版本信息到/include/linux/version.h
(3)创建链接符号/include/asm,链接include/asm-$(ARCH)源目录
(4)升级所有依赖的前提文件,在arch/$(ARCH)/Makefile中指定附加依赖文件
(5)递归地遍历各级子目录并且编译所有的目标
(6)链接所有的目标文件,生成顶层目录的vmlinux。链接的第一个目标文件在head-y列表中,是在arch/$(ARCH)/Makefile中定义的
(7)体系结构相关的部分做必须的后期处理,编译生成最终的引导映像。
3.Kbuild变量
(3)ARCH定义了目标板体系结构
(4)INSTALL_PATH为arch Makefile定义了安装驻留内存的内核映像和system.map文件
(5)INSTALL_MOD_PATH和MODLB
$(INSTALL_MOD_PATH)在安装模块的时候作为$(MODLIB)的前缀
$(MODLIB)指定模块安装的路径
4、Kbuild Makefile的定义
(1)目标定义
目标定义kbuild Makefile的核心。它们定义了要编译的文件、特殊的编译选项和药递归地遍历的子目录
最简单的kbuild makefile包含一行:
obj-y += foo.o
这是告诉kbuild,当前目录中要编译一个目标文件foo.o,foo.o应该从foo.c或者foo.S编译过来
如果要把foo.o编译为模块:obj-$(CONFIG_FOO) += foo.o
$(CONFIG_FOO)可以配置为y(静态链接)或者m(动态模块)
第8章 内核移植浅析
8.2 Linux内核启动过程分析
如图8.1