首页 > 代码库 > 正确地保存编译内核产生的.config文件-使用make savedefconfig

正确地保存编译内核产生的.config文件-使用make savedefconfig

正确地保存编译内核产生的.config文件-使用make savedefconfig

 

        一直以来保存编译内核生成的.config文件都是cp .config arch/arm/configs/xxx_defconfig来保存的。但是这其实是一个错误的方法。原因听我细细道来。


        以前一直没有在意过这个问题,直到遇到了make xxx_defconfig生成的.config与原xxx_defconfig有差异并解决后,引发我的对.config保存方式的疑惑。原来在arch/arm/configs/中保存的默认xxx_defconfig文件并不是一个完整的.config文件。其实执行过make xxx_defconfig后产生的.config会比原来的多近2000行配置。这些配置在执行make xxx_defconfig自动添加进去的。

 

        一些通用的内容并不会保存,怎样剔出掉这些在.config通用的内容?内核中提供了make savedefconfig这个命令。

savedefconfig   - Save current config as ./defconfig (minimal config)

       From: https://www.kernel.org/doc/makehelp.txt

        这样做的优点相当多了就,节省空间以至于Linux内核的代码量不会太大,第二对比差异的时候好对比一些。更重要的是这个是一个正统的方式。完整命令:

        $ make savedefconfig && mv defconfig arch/arm/configs/xxx_defconfig


        以下是make xxx_defconfig生成的.config与原xxx_defconfig有差异的内容:

1.楼

        接到的厂商发的kernel指定的配置文件是xxx_defconfig,仅仅是执行了make xxx_defconfig生成的.config就和xxx_defconfig就有差别。以前没有在意过这个问题,这次从头开发一个内核的时候出现如题的问题。很诡异,我添加自己的配置后还要保存这个.config呢?为什么我还没有添加的任何配置的时候就出现的不同。这点着实让我很不理解。

        对比测试方法是使用学习时mini2440开发版本配置mini2440_defconfig也两样会出现这个问题。这些东西是在哪里添加的,我大概推测是Makefile中添加的,但是又不确定,有没有人研究过?

2.楼

        以前学习MIni2440的时候都是copy mini2440_defconfig .config来进行生成的.config,使用make mini2440_defconfig原来经历的过程要麻烦的多。如下:

$ make mini2440_defconfig -n
make -f scripts/Makefile.build obj=scripts/basic
:
rm -f .tmp_quiet_recordmcount
mkdir -p include/linux include/config
make -f scripts/Makefile.build obj=scripts/kconfig mini2440_defconfig
set -e;  echo '  HOSTLD  scripts/kconfig/conf'; gcc  -o scripts/kconfig/conf scripts/kconfig/conf.o scripts/kconfig/zconf.tab.o  ; echo 'cmd_scripts/kconfig/conf := gcc  -o scripts/kconfig/conf scripts/kconfig/conf.o scripts/kconfig/zconf.tab.o  ' > scripts/kconfig/.conf.cmd
scripts/kconfig/conf --defconfig=arch/arm/configs/mini2440_defconfig Kconfig
$ 
        有点纠结了。使用这种方法还是copy的,以存在就是合理来讲make xxx_defconfig一样是一定的原因的。

3.楼

        再来一贴,问题找到了。两种实现结果最终是一样的,以下是验证过程,以mini2440_defconfig为例子。

$ cp arch/arm/configs/mini2440_defconfig .config
$ make menuconfig
scripts/kconfig/mconf arch/arm/Kconfig
#
# configuration written to .config
#
 
 
*** End of Linux kernel configuration.
*** Execute 'make' to build the kernel or try 'make help'.
$ cp .config .config_bak
$ make mini2440_defconfig
#
# configuration written to .config
#
$ diff .config .config_bak 
4c4
< # Thu Sep 25 15:23:14 2014
---
> # Thu Sep 25 15:22:54 2014
$
        make xxx_defconfig生成的.config可以直接make zImage,相当于copy mini2440_defconfig .config再执行make menuconfig的效果。

正确地保存编译内核产生的.config文件-使用make savedefconfig