正确地保存编译内核产生的.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的效果。

时间: 2024-10-30 20:39:27

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

linux源码升级编译内核

内核源码更新内核(以linux内核4.11.7为例子) 1. 内核更新前的工作准备 a. 系统:ubuntu16.04的Desktop版本,内核为linux-4.8.0: b. 虚拟机VMware Workstation Pro 12,并安装上述的ubuntu版本系统: c. 配置好相应的ubuntu16.04的基本操作,包括安装vim,nfs等必要包: d. 在http://www.kernel.org上下载最新的内核源码包,本文使用的为当时最新的内核源码包linux-4.11.7.tar.x

.Net中利用config文件来保存信息

前言: 在做一些项目时,往往会有站点的一些配置信息需要保存,比如站点名称,电话,联系人,邮箱这些等等,又因为此信息不经常更新,而且是单一的,所以放入数据库中会感觉占用了不必要的一些资源.所以就会想到这些信息放入文件中来保存.下面是我的一个例子,分享给大家. 1.我的项目是用的三层来写的,我就按照三层的方式给大家呈现一下,为了方便查询,我的文件名命名会加上当前层的首字母,M  D  B来区分. 首先创建一个Model层的实体 M_T_SysSet,下面的我的实体类中的字段信息. namespace

在.net中读写config文件的各种方法(自定义config节点)

http://www.cnblogs.com/fish-li/archive/2011/12/18/2292037.html 阅读目录 开始 config文件 - 自定义配置节点 config文件 - Property config文件 - Element config文件 - CDATA config文件 - Collection config文件 - 读与写 读写 .net framework中已经定义的节点 xml配置文件 xml配置文件 - CDATA xml文件读写注意事项 配置参数的

Linux重新编译内核指南

Linux的一个重要的特点就是其源代码的公开性,全世界任何一个软件工程师都可以将自己认为优秀的代码加入到其中,由此引发的一个明显的好处就是Linux修补漏洞的快速以及对最新软件技术的利用.而Linux的内核则是这些特点的最直接的代表. 为什么要升级内核 正如它的名字的字面意义,Linux的内核承担着Linux操作系统的最为核心的任务,是其它程序和硬件等运行过程中的仲裁者:它要管理所有进程的内存,保证它们都能平等得到处理器的时隙.此外,它还提供程序和硬件之间的接口等功能. 通常,更新的内核会支持更

嵌入式Linux编译内核步骤 / 重点解决机器码问题

嵌入式系统更新内核 1. 前言 手里有一块Friendly ARM的MINI2451的板子,这周试着编译内核,然后更新一下这个板子的Linux内核,想要更新Linux Kernel 4.1版本,但是种种原因实在是没有更新成功:于是使用Friendly ARM板子提供的3.6版本的内核,但是他们的内核全都配置好了,你只需要按照常规的方法进行编译就好了,貌似不能更深入的理解内核, 后来我从kernel.org官网上下载原版内核,然后一点点的把2451这个板子需要文件移植过去,可谓是问题百出啊,也学习

Linux编译内核

查看内核: #uname [OPTION] [OPTION] -r 显示内核版本和release号. 用户空间访问.监控内核的方式: /proc /sys 伪文件系统: /proc/sys 目录中很多文件是可读写的. /sys 某些文件可写 设定内核参数值的方法: 临时生效,重启后失效: #echo VALUE > /proc/sys/FILE #sysctl -w DIR.FILE=VALUE 在/proc/sys目录下可以忽略/proc/sys,剩余路径用DIR.FILE表示. 例如: #e

Freebsd 编译内核

# cd /usr/src/sys/i386/conf # cp GENERIC GENERIC.20060812# ee GENERIC 如果要加入ipf防火墙的话则加入options         IPFIREWALLoptions         IPFIREWALL_DEFAULT_TO_ACCEPToptions         IPFIREWALL_FORWARDoptions         IPDIVERT # cd /usr/src/sys/i386/conf 运行confi

编译内核让netfilter支持过滤layer7应用层协议

netfilter/layer7 默认情况下,netfilter只能过滤二.三.四层的数据,但是对于应用层的数据(比如qq,迅雷视频等等)是无法过滤掉的.我们又知道netfilter是工作在内核当中的,因此要让netfilter支持过滤layer7应用层协议的数据必须要重新编译内核.由于iptables是规则编辑工具,因此也要重新编译iptables让其能够支持对layer7应用层协议的编写. 整体步骤如下: 一.需要使用的软件 内核源码:linux-2.6.28.10.tar.gz iptab

linux学习之路之手动编译内核

手动编译内核 一般来说,内核的核心功是直接在内核里,其他大多数功能具有以下三种选择: 1.不使用该功能 2.将这些功能编译成模块的形式 3.将这些功能直接编译进内核当中 那么该如何手动编译内核呢? 手动编译的方式: 使用make gconfig命令,不过使用该命令适用于Gnome桌面环境,且需要安装图形开发库 使用make kconfig命令,该命令适用于KDE桌面环境,且需要安装图形开发库 不过最常见的方式是使用make menuconfig命令来编译,使用该命令会产生一个窗口界面 在该窗口下