Here's a how-to for building a recent Linux kernel on your Debian GNU/Linux box:

You will need to do all this as root. It's serious business building new Linux kernels :)

su -

The dash after the su command makes it behave as if you had logged in as root directly, a full login environment is applied.

Add the following to /etc/apt/sources.list:

# kernel-package
deb stretch-backports main

Then install the required tools and libraries installed:

apt update
apt install build-essential bison flex kmod initramfs-tools procps libncurses5-dev kernel-package fakeroot git-core screen zlib1g-dev screen libelf-dev

Use git to clone Linus' latest git repo:

cd /usr/src
git clone git://

This will take a long time:

Cloning into 'linux'...
remote: Counting objects: 2725713, done.
remote: Compressing objects: 100% (412816/412816), done.
remote: Total 2725713 (delta 2286272), reused 2725359 (delta 2285962)
Receiving objects: 100% (2725713/2725713), 559.28 MiB | 3.30 MiB/s, done.
Resolving deltas: 100% (2286272/2286272), done.

Once you have the source you can checkout a specific branch. To see all the remote branches/tags:

cd linux
git ls-remote

As of today the latest is v4.19-rc3, so you can use this command to get that version:

git checkout tags/v4.19-rc3 -b v4.19-rc3

You should see:

Switched to a new branch 'v4.19-rc3'

You can also see what branches and tags are available here:

Configure your new kernel based on your local hardware using localmodconfig:

make localmodconfig

This command will attempt to automatically configure support for your specific hardware. Just make sure all your hardware devices you want supported are plugged in before running the command.

Build the kernel and package it:

make-kpkg clean
CONCURRENCY_LEVEL=9 screen fakeroot make-kpkg --append-to-version=-1 --revision=1 --initrd kernel_image

make-kpkg clean cleans up the kernel source.

CONCURRENCY_LEVEL=9 translates into make -j9 later. make -j9 means to compile things in parallel using all your processors, so adjust accordingly for your actual system. I usually go 2x the actual number of processors +1.

screen is a command used to run another command in a virtual screen. The new virtual screen doesn't end if you disconnect. man screen if you're not familiar, it's a very useful tool.

fakeroot provides a fake root environment in which to build a package.

make-kpkg is a kernel building and packaging tool.

The --append-to-version is whatever you want, I increment mine by one every time I build a new kernel, and usually start over when Linus releases a "stable" kernel.

The --revision is whatever you want, I set this simply for a shorter package name. make-kpkg puts some useless crap in there unless you set it yourself.

The --initrd option makes dpkg build a new initrd image when you install the kernel package later. An initrd image contains drivers your system needs before your kernel loads, for example, raid and ext4.

Build a new kernel using a distro's (Debian in my case) default config takes a while. Everything will usually work on the first try using a distro config since everything is built as modules as much as possible, and all modules get built. You stand a good chance of successfully booting a new kernel built this way. Later you can remove stuff from the config and rebuild. Wash, rinse, and repeat until you get your kernel config down to just the hardware you actually have in your system.

Install the new kernel:

cd ..
dpkg -i linux-image-4.19.0-rc3-1+_1_amd64.deb


When your system comes back up..

> uname -a
Linux jupiter 4.19.0-rc3-1+ #1 SMP Sun Sep 11 09:06:55 CDT 2017 x86_64 x86_64 x86_64 GNU/Linux

   Recent articles
How-to build latest Linux kernel from Linus' git repo on Debian
Visual Studio Code Configuration
Lots of great reasons to ditch the Electoral College
ignore latin1 problem via psql
apache (1) apple (1) bash (2) bashrc (1) blackjack (1) callproof (1) college (1) config (1) console (1) data (1) debian (4) diff (1) django (2) electoral (1) enterprise (1) freebsd (1) games (1) git (3) github (2) gmail (1) go-lang (3) google (1) gourse (1) kernel (3) latin1 (1) linux (4) lottery (1) microsoft (1) module (1) mongodb (1) mp3s (1) mutt (1) patch (1) postgresql (2) powerball (1) psql (1) python (2) raspberrypi (1) rubocopyml (1) sed (1) stack (1) sublime (1) testing (2) trace (1) ubuntu (2) utf8 (1) virus (1) visualstudiocode (1) vote (1)

Copyright © 2018 · · All Rights Reserved