Forked from silviucc/how_to_build_kernel_on_Ubuntu.txt
Created
February 1, 2020 21:16
-
-
Save tomreyn/4b5b95721a7be05df29f5dc2ff405dd7 to your computer and use it in GitHub Desktop.
Easy way to build a mainline kernel on Ubuntu
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Compiling a Linux kernel on Ubuntu | |
---------------------------------- | |
This should be useful in the event that the user wants to investigate whether a newer kernel allows | |
certain peripherals to work better (or at all) or some other problems they might encounter while using | |
the kernel officially provided by Canonical. | |
As an example, I use the 4.1.5 release from kernel.org. | |
1) Make sure you have the build environment set up first: | |
sudo apt-get build-dep linux-image-$(uname -r) | |
2) Grab the sources from kernel.org. | |
mkdir linux_test_builds | |
cd linux_test_builds | |
wget -c https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.1.5.tar.xz | |
3) Unpack the kernel: | |
tar xfv linux-4.1.5.tar.xz | |
4) Go to http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.1.5-unstable/ | |
(make sure to match the kernel version) | |
5) Now go into the "linux-4.1.5" directory and download the following patches: | |
cd linux-4.1.5 | |
wget -c http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.1.5-unstable/0001-base-packaging.patch | |
wget -c http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.1.5-unstable/0002-debian-changelog.patch | |
wget -c http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.1.5-unstable/0003-configs-based-on-Ubuntu-4.1.0-3.3.patch | |
6) Apply the patches: | |
patch -p1 <0001-base-packaging.patch | |
patch -p1 <0002-debian-changelog.patch | |
patch -p1 <0003-configs-based-on-Ubuntu-4.1.0-3.3.patch | |
(patch file names may change in the future) | |
7) We need to set the execute bit on some scripts | |
chmod a+x debian/rules | |
8) Time to build the kernel | |
fakeroot debian/rules clean | |
fakeroot debian/rules do_extras_package=false do_tools=false binary-headers binary-generic | |
Note: On more recent version kernels, as Canonical experiments with ZFS, building 64bit | |
packages will fail. To prevent this from happening, use this command line: | |
fakeroot debian/rules do_mainline_build=true binary-headers binary-generic | |
(According to apw on Freenode / #ubuntu-kernel the contents of the -extra package | |
are merged into the main .deb package. Reason: | |
"we never build the mainline kernels with the extras package turned on because | |
we cannot guarentee the interdependancies are the same") | |
9) Installing the new kernel packages: | |
(package names will differ, of course, but you know which ones to select) | |
cd .. | |
sudo dpkg --install linux-headers-4.1.5-040105-generic_4.1.5-040105.201508101730_amd64.deb linux-headers-4.1.5-040105_4.1.5-040105.201508101730_all.deb linux-image-4.1.5-040105-generic_4.1.5-040105.201508101730_amd64.deb | |
* the packages are: | |
linux-headers-4.1.5-040105-generic_4.1.5-040105.201508101730_amd64.deb | |
linux-headers-4.1.5-040105_4.1.5-040105.201508101730_all.deb | |
linux-image-4.1.5-040105-generic_4.1.5-040105.201508101730_amd64.deb | |
10) Notes for docker users | |
If you're using docker, the default kernel on Trusty offers aufs. Docker will try to use it and fail | |
because aufs is not in the mainline kernel. The options are to either get the pacthes for aufs or tell | |
docker to use overlayfs which is included in the mainline tree since 3.18. | |
To make docker use overlayfs open /etc/default/docker and add this line | |
DOCKER_OPTS="-s overlay" | |
11) Documentation used to create this guide: | |
[1] http://askubuntu.com/questions/89542/how-to-build-the-mainline-kernel-source-package | |
[2] https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel | |
12) Other resources: | |
[1] http://kernel.ubuntu.com/~kernel-ppa/mainline/ | |
[2] https://www.kernel.org/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment