Makefile和Kconfig认识

linux2.6内核的配置系统由以下3个部分组成:
Makefile 定义linux内核的编译规则
配置文件Kconfig :给用户提供配置选择的功能
配置工具:包括配置命令解释器(对配置脚本中使用的配置命令进行解释)和配置用户界面

linux内核中增加程序需要完成以下3项工作:
将编写的源代码复制到linux内核源代码的相应目录。
在目录的Kconfig文件中增加新源代码对应项目的编译配置选项。
在目录的Makefile文件中增加对新源代码的编译条目。

Makefile文集是整个内核工程编译命令的集合。它根据配置情况,构造出需要编译的内核源码文件列表,然后分别编译,并把目标代码链接到一起,形成内核二进制文件。也就是说Makefile只是存储了源码文件构建目标文件的规则,具体是否按着规则去执行还要看那些配置变量。

我们进行make menuconfig时,会出现一个配置菜单,它是由各层Kconfig文件组成。Kconfig文件是以分布式的方式位于源码的各个子目录当中。最底层的Kconfig位于源码目录下的arch/x86/Kconfig。由此入口,使用source语句把需要的子Kconfig文件加入到上级目录的 Kconfig中,以此递归下去。Kconfig文件控制配置菜单是否出现新驱动的配置选项。用户通过Kconfig文件产生的配置选项,来控制对新驱动的配置。

在内核配置make menuconfig时,从Kconfig中读出配置菜单,用户配置完后保存到.config(在顶层目录下生成)中。在内核编译时,主Makefile调用这个.config,就知道了用户对内核的配置情况。

Makefile文件

obj-$(CONFIG_EXT3_FS) += ext3.o

ext3-y  := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o \
           ioctl.o namei.o super.o symlink.o hash.o resize.o ext3_jbd.o

ext3-$(CONFIG_EXT3_FS_XATTR)     += xattr.o xattr_user.o xattr_trusted.o
ext3-$(CONFIG_EXT3_FS_POSIX_ACL) += acl.o
ext3-$(CONFIG_EXT3_FS_SECURITY)  += xattr_security.o

CONFIG_变量来决定文件的编译方式,它存储在.config文件中,其中Y表示编译入内核,M表示编译为内核模块,其他不会被编译

如果一个模块有多个文件组成,这时候应采用模块名家-objs后缀或者-s后缀来定义模块的组成文件。

Kconfig
config 关键字定义新的配置选项,这后的几行定义了该配置选项的树形,包括类型,数据范围,输入提示,依赖关系(反向依赖关系),帮助信息和默认值等。
 

猜你喜欢

转载自imaginecup.iteye.com/blog/763264