Previously, we used the make menuconfig or
gconfig or xconfig method to change
different configuration options. But once you have a working
configuration, the only thing that is necessary is to update it with any
new options that have been added to the kernel since the last release. To
do this, the make oldconfig and
make silentoldconfig options should be used.
make oldconfig takes the current kernel configuration in
the .config file, and updates it based on the new
kernel release. To do this, it prints out all configuration questions, and
provides an answer for them if the option is already handled in the
configuration file. If there is a new option, the program stops and asks
the user what the new configuration value should be set to. After
answering the prompt, the program continues on until the whole kernel
configuration is finished.
make silentoldconfig works exactly the same way as
oldconfig does, but it does not print anything to the
screen, unless it needs to ask a question about a new configuration option.
Usually, when upgrading between different versions of the stable releases,
no new configuration options are added, as this is supposed to be a
stable kernel series. If this happens, there are no new
questions that need to be answered for the kernel configuration, so the
program continues successfully without any need for user intervention. An
example of this is moving from the 2.6.17.9 to 2.6.17.11 release:
$
cd linux-2.6.17.11
$
make silentoldconfig
scripts/kconfig/conf -s arch/i386/Kconfig
#
# using defaults found in .config
#
An example for where a new kernel option shows up in a new release is the
following. The kernel option to enable Mutex debugging
is a new one when switching between certain kernel releases. Here is the
output when this happened:
$ make silentoldconfig
scripts/kconfig/conf -s arch/i386/Kconfig
#
# using defaults found in .config
#
*
* Restart config...
*
*
* Kernel hacking
*
Show timing information on printks (PRINTK_TIME) [Y/n/?] y
Magic SysRq key (MAGIC_SYSRQ) [Y/n/?] y
Kernel debugging (DEBUG_KERNEL) [Y/n/?] y
Kernel log buffer size (16 => 64KB, 17 => 128KB) (LOG_BUF_SHIFT) [16] 16
Detect Soft Lockups (DETECT_SOFTLOCKUP) [Y/n/?] y
Collect scheduler statistics (SCHEDSTATS) [N/y/?] n
Debug slab memory allocations (DEBUG_SLAB) [Y/n/?] y
Memory leak debugging (DEBUG_SLAB_LEAK) [Y/n] y
Mutex debugging, deadlock detection (DEBUG_MUTEXES) [N/y/?] (NEW)
y
The configuration program stopped at this option and asked for the user to
choose an option. Then press y and the program
continues on:
Spinlock debugging (DEBUG_SPINLOCK) [Y/n/?] y
Sleep-inside-spinlock checking (DEBUG_SPINLOCK_SLEEP) [Y/n/?] y
kobject debugging (DEBUG_KOBJECT) [N/y/?] n
Highmem debugging (DEBUG_HIGHMEM) [N/y/?] n
Compile the kernel with debug info (DEBUG_INFO) [N/y/?] n
Debug Filesystem (DEBUG_FS) [Y/?] y
Debug VM (DEBUG_VM) [N/y/?] n
Compile the kernel with frame pointers (FRAME_POINTER) [N/y/?] n
Compile the kernel with frame unwind information (UNWIND_INFO) [N/y/?] n
Force gcc to inline functions marked 'inline' (FORCED_INLINING) [N/y/?] n
torture tests for RCU (RCU_TORTURE_TEST) [N/m/y/?] n
Check for stack overflows (DEBUG_STACKOVERFLOW) [N/y/?] n
Stack utilization instrumentation (DEBUG_STACK_USAGE) [N/y/?] n
Stack backtraces per line (STACK_BACKTRACE_COLS) [2] 2
*
* Page alloc debug is incompatible with Software Suspend on i386
*
Write protect kernel read-only data structures (DEBUG_RODATA) [N/y/?] n
Use 4Kb for kernel stacks instead of 8Kb (4KSTACKS) [N/y/?] n
So upgrading the kernel configuration for a new release is as simple as
using a different configuration option to
make
. With
this method, you do not need to use the graphical or text oriented
configuration programs for any new kernel update.