2024年4月28日发(作者:)
Linux系统的Makefile、Kconfig和模块
1 Makefile
1.1 Makefile组织层次
Linux的Make体系由如下几部分组成:
Ø 顶层Makefile
顶层Makefile通过读取配置文件,递归编译内核代码树的相关目录,从而产生两个重
要的目标文件:vmlinux和模块。
Ø 内核相关Makefile
位于arch/$(ARCH) 目录下,为顶层Makefile提供与具体硬件体系结构相关的信息。
Ø 公共编译规则定义文件。
包括 、、、等文件组成。这些文
件位于scripts目录中,定义了编译需要的公共的规则和定义。
Ø 内核配置文件 .config
通过调用make menuconfig或者make xconfig命令,用户可以选择需要的配置来生成
期望的目标文件。
Ø 其他Makefile
主要为整个Makefile体系提供各自模块的目标文件定义,上层Makefile根据它所定义
的目标来完成各自模块的编译。
1.2 Makefile的使用
在编译内核之前,用户必须首先完成必要的配置。Linux内核提供了数不胜数的功能,
支持众多的硬件体系结构,这就需要用户对将要生成的内核进行裁减。内核提供了多种不同
的工具来简化内核的配置。
make config,字符界面下命令行工具,这个工具会依次遍历内核所有的配置项,要
求用户进行逐项的选择配置。这个工具会耗费用户太多时间,除非万不得以(你的编译主机
不支持其他配置工具)一般不建议使用。
make menuconfig,基于ncurse库编制的图形界面工具,一般台式机使用该工具。
make xconfig,基于X11的图形配置工具,一般用于工作站环境。
1
当用户完成配置后,配置工具会自动生成 .config文件,它被保存在内核代码树的根
目录下。当一切工作完成以后,用户只需要简单键入make或make zImage,剩下所有
的工作makefile就会自动替你完成了。
1.3 Makefile编译流程
当用户使用Linux的Makefile编译内核版本时,Makefile的编译流程如下:
Ø 使用命令行或者图形界面配置工具,对内核进行裁减,生成.config配置文件
Ø 保存内核版本信息到 include/linux/version.h
Ø 产生符号链接 include/asm,指向实际目录 include/asm-$(ARCH)
Ø 为最终目标文件的生成进行必要的准备工作
Ø 递归进入 /init 、/kernel、 /drivers、 /net、 /lib等目录和其中的子目录来编译生成所
有的目标文件
Ø 链接上述过程产生的目标文件生成vmlinux,vmlinux存放在内核代码树的根目录下
Ø 最后根据 arch/$(ARCH)/Makefile文件定义的后期编译的处理规则建立最终的映象
bootimage,包括创建引导记录、准备initrd映象和相关处理
1.4 Makefile关键规则和定义描述
1.4.1 目标定义
目标定义是Makefile文件的核心部分,目标定义通知Makefile需要生成哪些目标文件、
如何根据特殊的编译选项链接目标文件,同时控制哪些子目录要递归进入进行编译。
这个例子Makefile文件位于/fs/ext2目录 :
#
# Makefile for the linux ext2-filesystem routines.
#
obj-$(CONFIG_EXT2_FS) += ext2.o
ext2-y := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o
ioctl.o namei.o super.o symlink.o
ext2-$(CONFIG_EXT2_FS_XATTR) += xattr.o xattr_user.o xattr_trusted.o
ext2-$(CONFIG_EXT2_FS_POSIX_ACL) += acl.o
2
发布评论