《嵌入式Linux系统开发技术详解--基于ARM(完整版)》华清远见

2019-07-12 21:09发布

第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