Sunday, June 26, 2011

Linux kenel make options

There are various make options for configuring the Linux kernel compilation

1. "make config" - Simple plain text interface. It is hard to use and requires you to go through each and every option manually. Not recommended.


2. "make menuconfig" - ncurse based text based interface with color menus, radiolists & dialogs. It needs the ncurse package to be installed in the system. Highly recommended. There are different variation of it that run on X based interface :
a. "make xconfig" - Qt (X windows) based configuration tool.
b. "make gconfig" - GTK (X windows) based configuration tool.


3. "make nconfig" - similar to "make menuconfig" above but a better text based color menus.


4. "make oldconfig" - Default all questions based on the contents of your existing ./.config file and asking about new config symbols. You need to copy your old kernel .config file to the current location.

5. "make silentoldconfig"- Like above, but avoids cluttering the screen with questions already answered. Additionally updates the dependencies.

6. "make defconfig" - Create a ./.config file by using the default symbol values from either arch/$ARCH/defconfig or arch/$ARCH/configs/${PLATFORM}_defconfig, depending on the architecture.

7. "make ${PLATFORM}_defconfig" - Create a ./.config file by using the default symbol values from arch/$ARCH/configs/${PLATFORM}_defconfig. Use "make help" to get a list of all available
platforms of your architecture.

8. "make localmodconfig" - Runs "lsmod" to find all the modules loaded on the current running system. Reads all the Makefiles to locate which CONFIG enables a module. Reads the Kconfig files to find the dependencies and selects that is needed to support a CONFIG. Finally, reads the .config file and removes any module "=m" that is not needed to enable the currently loaded modules.

9. "make allyesconfig" - Create a ./.config file by setting symbol values to 'y' as much as possible.

10. "make allmodconfig" - Create a ./.config file by setting symbol values to 'm' as much as possible.

11. "make allnoconfig" - Create a ./.config file by setting symbol values to 'n' as much as possible.

12. "make randconfig" - Create a ./.config file by setting symbol values to random values.

More information is available in the ./README file of the kernel source tree.

Friday, June 24, 2011

Make only specific kernel modules

1. You need to first create the .config file by running any of the various "make config" commands
$make menuconfig

2. Then run the "make" command to build the basic kernel tree
$make

3. Now to build the specific kernel module you can do

$make modules SUBDIRS=drivers/staging

Wednesday, June 1, 2011

Customize compiling the Linux kernel

There are various ways to customize the Linux kernel compilation to make it more interesting and fun :

1. You can use a tool called "colormake" to show the output of make in a much more readable format.

2. "$make -s" wont print any commands (as if every command was prefixed by @). If the commands themselves are printing output, redirect standard output to /dev/null but still show the standard error by using "$make -s > /dev/null"

More information on various gcc options is available here