Linux Kernel Compile
1. Compile
1.1. Clean
- make clean: Deletes most files generated during build except the .config file. The .config file is the config file used in previous kernel compilation.
- make mrproper: Deletes all files generated during build including the .config file and config-related backup files.
- make distclean: Performs mrproper and additionally deletes editor backup files and patch files.
1.2. Configuration
- make config: Sets config in a question-and-answer format.
- make menuconfig: Sets config using an Ncurses (Text)-based GUI. When using a config file from a previous kernel version, if additional settings are needed, they are set to default values.
- make xconfig: Sets config using a QT (X-Window)-based GUI. When using a config file from a previous kernel version, if additional settings are needed, they are set to default values.
- make oldconfig: Uses an existing .config file. When using a config file from a previous kernel version, if additional settings are needed, it asks the user for configuration methods in a question-and-answer format.
1.3. Build
- make zImage: Compiles the kernel and creates a compressed zImage file.
- make uImage: Creates a zImage file and then creates a uImage file used by u-boot. The mkimage tool must be installed. On Ubuntu, install the uboot-mkimage package.
- make modules: Compiles modules.
1.4. Install
- make install: Creates an initrd image, copies vmlinuz and System.map files to /boot, creates symbolic links, and modifies grub.conf appropriately so that it can boot with the new kernel image.
- make modules-install: Stores compiled modules in the $INSTALL-MOD-PATH/lib/modules/[kernel version] folder. You can change the copy location by setting the $INSTALL-MOD-PATH variable in the shell. If $INSTALL-MOD-PATH is not set, they are copied under the lib folder of /(root).
1.5. E.T.C
- make tags: Creates ctags files.
- make cscope: Creates cscope files.
- make help: Shows make targets and descriptions.
2. Example
2.1. ARM
$ ARCH=arm CROSS-COMPILE=arm-linux-gnueabi- make menuconfig
$ ARCH=arm CROSS-COMPILE=arm-linux-gnueabi- make zImage
$ ARCH=arm CROSS-COMPILE=arm-linux-gnueabi- make uImage
$ ARCH=arm CROSS-COMPILE=arm-linux-gnueabi- make modules
$ ARCH=arm CROSS-COMPILE=arm-linux-gnueabi- INSTALL-MOD-PATH=tmp make modules-install