How to Install and Compile Kernel in Debian

One of the biggest draws to using Linux is its easy customization and one of the most fun things to customize is the Kernel itself, the heart of the Linux operating system.

Chances are that you will most likely never have to compile your own kernel. The one that ships with your distribution and updates via your package management system is usually good enough, but there are times when it might be necessary to recompile the kernel.

Some of these reasons might be special hardware needs, the desire to create a monolithic kernel instead of a modularized one, optimizing the kernel by removing useless drivers, running a development kernel, or simply learning more about Linux.

In this case, we are going to compile a newly released kernel on Debian systems that includes several new features, such as new drivers for the graphics cards, and offers significant improvements to the filesystem.

How to Compile Kernel in Debian

To get started, we are going to need some packages, namely build-essential and kernel headers.

sudo apt update
sudo apt install build-essential linux-headers-$(uname -r)

Now, visit the official kernel website to download the desired kernel version. Alternatively, you can use the following commands to download the source directly.

wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.7.tar.xz
tar -xvf linux-6.7.tar.xz
cd linux-6.7/

Now, we will need to configure the kernel, it is advisable to begin with the configuration currently in use and build upon it. To accomplish this, we’ll copy the existing configuration from the /boot directory to the current working directory and save it as .config.

cp /boot/config-`uname -r` .config

To start with the actual configuration process, you have one of two options.

  1. If you have X11 installed, you can run make xconfig, and have a nice GUI menu to assist you as you configure your Kernel.
  2. If you are running in a CLI environment, you can run make menuconfig, but it will need the libncurses5-dev package installed to use it.

If you are going with a cli environment, make sure to install the libncurses5-dev package to start the kernel configuration process as shown.

apt install libncurses5-dev
make menuconfig
Kernel Configuration Menu
Kernel Configuration Menu

As you will see, once you are in the configuration of your choice, there are a ton of different options available for your Kernel. In fact, there are far too many for the scope of this tutorial.

When selecting Kernel options, the best way is by trial and error, and doing plenty of Googling, which is the best way to learn. If you are simply just trying to update your Kernel to the most recent version, you don’t have to change anything and can simply select “Save Configuration”. Since we copied the current kernel’s configuration file to the new kernel’s .config file.

Save Kernel Configuration
Save Kernel Configuration

Be mindful that “Kernel module loader” is selected in “Loadable module support”. If it is not, and you are using kernel modules, it can seriously mess things up.

Kernel Module Support
Kernel Module Support

Now initiate the kernel compilation process using the following commands, which will compile the kernel, install modules, and copy the necessary files to the boot directory.

make
make modules_install
make install

Once installed, you simply reboot, and select the new kernel from your GRUB menu.

Debian New Kernel
Debian New Kernel

Be sure to pay close attention to any error messages during the boot process so you can troubleshoot any issues.

To check the new kernel version in Debian, you can use the following command in the terminal.

uname -r

If you want to see a list of installed kernels, you can check the contents of the /boot directory:

ls /boot
Check Kernel Version
Check Kernel Version

Remove Old Kernel in Debian

To remove old kernels in Debian, first you need to list the installed kernels to identify the ones you want to remove using the dpkg command.

dpkg --list | grep linux-image

To remove an old kernel, use the following apt command and make sure to replace linux-image-OLD_VERSION with the version number of the kernel you want to remove.

sudo apt purge linux-image-OLD_VERSION
Remove Old Debian Kernel
Remove Old Debian Kernel

After removing the old kernels, update GRUB to reflect the changes.

update-grub

In conclusion, compiling a kernel in Debian is a valuable skill that allows users to tailor their operating system to specific needs, incorporating the latest features and optimizations.