Written in | C |
---|---|
Operating system | Linux |
Type | build automation tool |
License | GNU General Public License |
Website | www |
make menuconfig
is one of five similar tools that can configure Linux source, a necessary early step needed to compile the source code. make menuconfig
, with a menu-driven user interface, allows the user to choose the features of Linux (and other options) that will be compiled. It is normally invoked using the command make menuconfig
; menuconfig is a target in Linux Makefile.
Overview
make menuconfig
was not in the first version of Linux. The predecessor tool is a question-and-answer-based utility (make config
, make oldconfig
).
Variations of the tool tool for Linux configuration include:
make xconfig
, which requires Qtmake gconfig
, which uses GTK+make nconfig
, which is similar tomake menuconfig
.
All these tools use the Kconfig language internally. Kconfig is also used in other projects, such as Das U-Boot, a bootloader for embedded devices, Buildroot, a tool for generating embedded Linux systems, and BusyBox, a single-executable shell utility toolbox for embedded systems.
Advantages over earlier versions
Despite being a simple design, make menuconfig
offers considerable advantages to the question-and-answer-based configuration tool make oldconfig
, the most notable being a basic search system and the ability to load and save files with filenames different from ".config
". make menuconfig
gives the user an ability to navigate forwards or backwards directly between features, rather than using make config
by pressing the ↵ Enter key to navigate linearly to the configuration for a specific feature.
If the user is satisfied with a previous .config
file, using make oldconfig
uses this previous file to answer all questions that it can, only interactively presenting the new features. This is intended for a version upgrade, but may be appropriate at other times.
make menuconfig
is a light load on system resources unlike make xconfig
(uses Qt as of version 2.6.31.1, formerly Tk) or make gconfig
, which utilizes GTK+. It's possible to ignore most of the features with make config
, and doing so makes it more likely that one will configure an incomplete or oversized kernel. It's recommended to start with the .config
file included with Linux distribution, which makes it easier to configure a custom kernel.
Better than editing the .config
by hand, make menuconfig
shows the descriptions of each feature (by pressing the "Help" button while on a menu option), and adds some (primitive in version 2.6.31.1) dependency checking. With make oldconfig, dependency checking can be done in one step, but requires the user to locate the features that were changed, by hand, to be sure that the needed ones are still enabled.
Practically, using both make menuconfig
and make oldconfig
, diff, (also cvs and a decent text editor) provides the most flexibility and most dependability. Configuring Linux is a significant labor, so users are strongly advised to make backups of it (i.e. cp /usr/src/linux*/.config ~/savemywork.config
).
The help information is distributed throughout the kernel source tree in the various files called Kconfig.
Dependencies
To use make menuconfig
, Linux source is a requirement, a make tool, a C compiler, and the ncurses library.
Key strokes
Key stroke | Meaning |
---|---|
? | Option description and tips/Help |
←→↑↓PgUpPgDn | Navigate through the kernel features and menuconfig commands. |
Esc+Esc | Exit menuconfig or cancel the command. |
↵ Enter | Activate a command, or expand a branch. |
y | Compile and include this feature inside of the kernel. |
m | Compile this feature as a module, separate from the kernel. |
n | Do not compile the feature. |
/ | Search configuration parameter. |
Symbols
To the left of the features is the setting (y, M, or empty) enclosed in two punctuation marks.
Symbol | Meaning |
---|---|
< > | No dependencies. |
[ ] | A dependency requires this to be compiled-in (y), or not compiled (n). |
{ } | A dependency requires this to be a module (m) or compiled-in (y). |
- - | A dependency requires this to be compiled-in (y). |
Note that the supplied dependency information is primitive, it does not tell you the names of the dependant features.
Symbol | Meaning |
---|---|
---> | Use ↵ Enter to expand this branch as a new window. |
(Experimental) | Unstable/lesser code, beware. |
(New) | An option not in an older version of Linux. |
(Deprecated) | An option that will be removed in future versions. |
menuconfig in the kernel-build workflow
The user is encouraged to read the Linux README, since there are also many other make targets (beyond modules_install and install). Each will configure the kernel, but with different features activated, or using a different interactive interface; such as tinyconfig or allyesconfig.
simple (but effective) workflow
make menuconfig
- Next build the compressed kernel and its modules, a long process.
make
. - Install using your favorite method such as
make modules_install
,make install
.
See also
References
- The
make menuconfig
tool itself. - Linux From Scratch
- How to Build a Minimal Linux System Archived 2009-10-23 at the Wayback Machine
- Creating custom kernels with Debian's kernel-package system
- Cross compiling Linux on IBM System z
- How to roll your own Linux
- Building A Kernel The Traditional Way
- The Linux Kernel HOWTO
- Kconfig language