Difference between revisions of "Compiling a kernel"
imported>ThorstenStaerk |
imported>ThorstenStaerk |
||
(9 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
− | This is an example how to compile a Linux kernel. It has been tested for SUSE Linux | + | This is an example how to compile a Linux kernel. It has been tested for SUSE Linux 11.1 and kernel 2.6.27, but should work same or similar for every combination. |
= Check prerequesites = | = Check prerequesites = | ||
− | * Make sure you have a compiler installed | + | * Make sure you have a compiler installed - [[open a console]] and issue |
− | yast -i gcc | + | [[yast]] -i gcc |
= Get the code = | = Get the code = | ||
* Download the kernel from ftp.kernel.org | * Download the kernel from ftp.kernel.org | ||
− | wget | + | [[wget]] https://kernel.org/pub/linux/kernel/v2.6/linux-2.6.27.tar.bz2 |
* unpack the kernel | * unpack the kernel | ||
− | + | bunzip2 linux-2.6.27.tar.bz2 | |
* unpack the kernel for the second time | * unpack the kernel for the second time | ||
− | tar xvf linux-2.6. | + | [[tar]] xvf linux-2.6.27.tar |
= Build it = | = Build it = | ||
* configure the kernel | * configure the kernel | ||
− | cd linux-2.6. | + | [[cd]] linux-2.6.27 |
− | make oldconfig | + | [[make]] oldconfig |
* answer some un-understandable questions | * answer some un-understandable questions | ||
− | The sense of the step ''make oldconfig'' is to tell the kernel its configuration, e.g. which parts should be built as a module, which parts should not be built at all and the name of your special build. oldconfig takes over the settings from the running kernel that you can check with <tt>zcat /proc/config.gz</tt>. The settings for the new kernel are stored in the file ''.config''. E.g. a line <tt>CONFIG_LOCALVERSION="-thorsten"</tt> in .config would tell kernel 2.6.27 to call himself 2.6.27-thorsten. | + | The sense of the step ''make oldconfig'' is to tell the kernel its configuration, e.g. which parts should be built as a module, which parts should not be built at all and the name of your special build. oldconfig takes over the settings from the running kernel that you can check with <tt>zcat /proc/config.gz</tt> if the switch EXTRACT-IKCONFIG is on. The settings for the new kernel are stored in the file ''.config''. E.g. a line <tt>CONFIG_LOCALVERSION="-thorsten"</tt> in .config would tell kernel 2.6.27 to call himself 2.6.27-thorsten. |
− | * compile the kernel, | + | * compile the kernel, |
make -j4 | make -j4 | ||
+ | ;Note: on a virtual machine with two virtual CPUs @ 2.4 GHz, this lasted 55 minutes. | ||
* compile the drivers | * compile the drivers | ||
make -j4 modules | make -j4 modules | ||
Line 28: | Line 29: | ||
make modules_install | make modules_install | ||
* install the kernel | * install the kernel | ||
− | cp arch/''x86_64''/boot/bzImage /boot/vmlinuz-2.6. | + | cp arch/''x86_64''/boot/bzImage /boot/vmlinuz-2.6.27 |
This will install the kernel for the ''x86_64'' architecture. | This will install the kernel for the ''x86_64'' architecture. | ||
* prepare the initial ramdisk | * prepare the initial ramdisk | ||
− | cp System.map /boot | + | [[cp]] System.map /boot |
mkinitrd | mkinitrd | ||
This will build an initial ramdisk for all kernels contained in /boot. | This will build an initial ramdisk for all kernels contained in /boot. | ||
* add an entry to the bootloader. Let's take grub's /boot/grub/menu.lst: | * add an entry to the bootloader. Let's take grub's /boot/grub/menu.lst: | ||
− | title 2.6. | + | title 2.6.27-selfcompiled |
root (hd0,0) | root (hd0,0) | ||
− | kernel /boot/vmlinuz-2.6. | + | kernel /boot/vmlinuz-2.6.27 root=/dev/sda1 |
− | initrd /boot/initrd-2.6.21 | + | initrd /boot/initrd-2.6.27 |
+ | |||
+ | = See also = | ||
+ | * [[Compiling_kernel_2.6.21]] |
Latest revision as of 22:02, 27 March 2020
This is an example how to compile a Linux kernel. It has been tested for SUSE Linux 11.1 and kernel 2.6.27, but should work same or similar for every combination.
Check prerequesites
- Make sure you have a compiler installed - open a console and issue
yast -i gcc
Get the code
- Download the kernel from ftp.kernel.org
wget https://kernel.org/pub/linux/kernel/v2.6/linux-2.6.27.tar.bz2
- unpack the kernel
bunzip2 linux-2.6.27.tar.bz2
- unpack the kernel for the second time
tar xvf linux-2.6.27.tar
Build it
- configure the kernel
cd linux-2.6.27 make oldconfig
- answer some un-understandable questions
The sense of the step make oldconfig is to tell the kernel its configuration, e.g. which parts should be built as a module, which parts should not be built at all and the name of your special build. oldconfig takes over the settings from the running kernel that you can check with zcat /proc/config.gz if the switch EXTRACT-IKCONFIG is on. The settings for the new kernel are stored in the file .config. E.g. a line CONFIG_LOCALVERSION="-thorsten" in .config would tell kernel 2.6.27 to call himself 2.6.27-thorsten.
- compile the kernel,
make -j4
- Note
- on a virtual machine with two virtual CPUs @ 2.4 GHz, this lasted 55 minutes.
- compile the drivers
make -j4 modules
Install it
- install the drivers
make modules_install
- install the kernel
cp arch/x86_64/boot/bzImage /boot/vmlinuz-2.6.27
This will install the kernel for the x86_64 architecture.
- prepare the initial ramdisk
cp System.map /boot mkinitrd
This will build an initial ramdisk for all kernels contained in /boot.
- add an entry to the bootloader. Let's take grub's /boot/grub/menu.lst:
title 2.6.27-selfcompiled root (hd0,0) kernel /boot/vmlinuz-2.6.27 root=/dev/sda1 initrd /boot/initrd-2.6.27