Sunday, 3 August 2014

[Tutorial] Kernel.org Kernel Build for Ubuntu

The following document should help users build their own kernel from the latest stable kernel from kernel.org. Please note that the following steps are targeted towards Ubuntu users, though they will also work on Ubuntu deratives (including Mint, Elementary, Deepin etc.) and may also work on Debian and non-Ubuntu, Debian deratives.

Prerequisites

There are a few tools that are necessary in order to build your own kernel(s). The ‘kernel-package’ provides the make-kpkg utility which automatically build your kernel and generate the linux-image and linux-header .deb files which can be installed. You will need to install the following packages:

Replace v3.x/linux-3.15.8.tar.xz with the kernel version you want to download. 3.15.8 was the latest stable version at the time of writing.

Extract the files:

tar xf linux-3.15.8.tar.xz

Again, make sure to change the filename to be the same as the file you downloaded. You can also remove the original tar.xz file once all the files have been extracted.

Change the directory:

cd linux-3.15.8

The directory name will be the same as the filename of the tar.xz you downloaded, except without the .tar.xz.

Copy the kernel config file from your existing system to the kernel tree:

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

Bring the config file up to date. In cases where your kernel source is significantly newer than the existing config file, you’ll be presented with all of the new config options for which there is no existing config file setting. You can either sit there and keep hitting Enter to take the default (generally safe), or you can just run:

yes ''| make oldconfig

which emulates exactly the same thing and saves you all that time. Otherwise, run:

make oldconfig

(optional) If you need to make any kernel config changes, do the following and save your changes when prompted:

make menuconfig

Clean the kernel source directory:

make clean

Build the linux-image and linux-header .deb files using a thread per core + 1. This process can take a lot of time - it took about 17 hours on my old laptop with a Celeron processor, but it should take between 20 minutes and 3 hours on a modern computer:

make -j `getconf _NPROCESSORS_ONLN` deb-pkg LOCALVERSION=-custom

With this command the package names will be something like linux-image-3.15.8-custom and linux-headers-3.15.8-custom, and in that case the version will be 3.15.8-custom-10.00.Custom. You may change the string “custom” into something else by changing the LOCALVERSION option.

Change to one directory level up (this is where the linux-image and linux-header .deb files were put):

cd ../

Now install the .deb files. Replace the filenames in this example to match your filenames: