Makefile和Kconfig认识

本文介绍Linux 2.6内核的配置系统组成及工作流程,包括Makefile、Kconfig文件和配置工具的作用。阐述如何通过修改Kconfig和Makefile文件添加新程序并编译。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 关键字定义新的配置选项,这后的几行定义了该配置选项的树形,包括类型,数据范围,输入提示,依赖关系(反向依赖关系),帮助信息和默认值等。
 
k1@k1:~/linux/IMAX6ULL/NXP_uboot/uboot-imx-rel_imx_4.1.15_2.1.0_ga$ chmod u+x mx6ull_14x14_emmc.sh k1@k1:~/linux/IMAX6ULL/NXP_uboot/uboot-imx-rel_imx_4.1.15_2.1.0_ga$ ./mx6ull_14x14_emmc.sh CLEAN scripts/basic CLEAN scripts/kconfig CLEAN include/config include/generated HOSTCC scripts/basic/fixdep HOSTCC scripts/kconfig/conf.o SHIPPED scripts/kconfig/zconf.tab.c SHIPPED scripts/kconfig/zconf.lex.c SHIPPED scripts/kconfig/zconf.hash.c HOSTCC scripts/kconfig/zconf.tab.o HOSTLD scripts/kconfig/conf arch/arm/cpu/armv7/mx6/Kconfig:195: syntax error arch/arm/cpu/armv7/mx6/Kconfig:194: unknown option "GET_MX6ULL_ALIENTEK_EMMC" arch/arm/cpu/armv7/mx6/Kconfig:195:warning: prompt redefined scripts/kconfig/Makefile:114: recipe for target 'mx6ull_14x14_evk_emmc_defconfig' failed make[1]: *** [mx6ull_14x14_evk_emmc_defconfig] Error 1 Makefile:479: recipe for target 'mx6ull_14x14_evk_emmc_defconfig' failed make: *** [mx6ull_14x14_evk_emmc_defconfig] Error 2 make -f ./Makefile silentoldconfig make -f ./scripts/Makefile.build obj=scripts/basic rm -f .tmp_quiet_recordmcount make -f ./scripts/Makefile.build obj=scripts/kconfig silentoldconfig mkdir -p include/config include/generated scripts/kconfig/conf --silentoldconfig Kconfig arch/arm/cpu/armv7/mx6/Kconfig:195: syntax error arch/arm/cpu/armv7/mx6/Kconfig:194: unknown option "GET_MX6ULL_ALIENTEK_EMMC" arch/arm/cpu/armv7/mx6/Kconfig:195:warning: prompt redefined scripts/kconfig/Makefile:46: recipe for target 'silentoldconfig' failed make[2]: *** [silentoldconfig] Error 1 Makefile:479: recipe for target 'silentoldconfig' failed make[1]: *** [silentoldconfig] Error 2 make: *** No rule to make target 'include/config/auto.conf', needed by 'include/config/uboot.release'。 停止。 k1@k1:~/linux/IMAX6ULL/NXP_uboot/uboot-imx-rel_imx_4.1.15_2.1.0_ga$ vim Makefile k1@k1:~/linux/IMAX6ULL/NXP_uboot/uboot-imx-rel_imx_4.1.15_2.1.0_ga$ vim mx6ull_14x14_emmc.sh k1@k1:~/linux/IMAX6ULL/NXP_uboot/uboot-imx-rel_imx_4.1.15_2.1.0_ga$ chmod u+x mx6ull_14x14_emmc.sh k1@k1:~/linux/IMAX6ULL/NXP_uboot/uboot-imx-rel_imx_4.1.15_2.1.0_ga$ ./mx6ull_14x14_emmc.sh CLEAN scripts/basic CLEAN scripts/kconfig CLEAN include/config include/generated HOSTCC scripts/basic/fixdep HOSTCC scripts/kconfig/conf.o SHIPPED scripts/kconfig/zconf.tab.c SHIPPED scripts/kconfig/zconf.lex.c SHIPPED scripts/kconfig/zconf.hash.c HOSTCC scripts/kconfig/zconf.tab.o HOSTLD scripts/kconfig/conf arch/arm/cpu/armv7/mx6/Kconfig:195: syntax error arch/arm/cpu/armv7/mx6/Kconfig:194: unknown option "GET_MX6ULL_ALIENTEK_EMMC" arch/arm/cpu/armv7/mx6/Kconfig:195:warning: prompt redefined scripts/kconfig/Makefile:114: recipe for target 'mx6ull_14x14_evk_emmc_defconfig' failed make[1]: *** [mx6ull_14x14_evk_emmc_defconfig] Error 1 Makefile:479: recipe for target 'mx6ull_14x14_evk_emmc_defconfig' failed make: *** [mx6ull_14x14_evk_emmc_defconfig] Error 2 make -f ./Makefile silentoldconfig make -f ./scripts/Makefile.build obj=scripts/basic rm -f .tmp_quiet_recordmcount make -f ./scripts/Makefile.build obj=scripts/kconfig silentoldconfig mkdir -p include/config include/generated scripts/kconfig/conf --silentoldconfig Kconfig arch/arm/cpu/armv7/mx6/Kconfig:195: syntax error arch/arm/cpu/armv7/mx6/Kconfig:194: unknown option "GET_MX6ULL_ALIENTEK_EMMC" arch/arm/cpu/armv7/mx6/Kconfig:195:warning: prompt redefined scripts/kconfig/Makefile:46: recipe for target 'silentoldconfig' failed make[2]: *** [silentoldconfig] Error 1 Makefile:479: recipe for target 'silentoldconfig' failed make[1]: *** [silentoldconfig] Error 2 make: *** No rule to make target 'include/config/auto.conf', needed by 'include/config/uboot.release'。 停止。 k1@k1:~/linux/IMAX6ULL/NXP_uboot/uboot-imx-rel_imx_4.1.15_2.1.0_ga$
08-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值