Installing a Vanilla Linux Kernel on Fedora
Updated on 2017-12-28
Installing a Vanilla Linux Kernel on Fedora is quite simple (once one knows how to do it..)
Configuring & Building Linux
One can start by cloning Torvalds' Linux repository to fetch the latest master (or we could fetch the latest stable release) :
$ git clone https://github.com/torvalds/linux.git
$ cd linux
I like setting EXTRAVERSION in the Makefile to be able to identify
which kernel I am testing. That can be done by opening the Makefile
with one's favorite editor or replacing the EXTRAVERSION line with
sed:
$ sed -i "s/^EXTRAVERSION = .*$/EXTRAVERSION = name_of_my_version/" Makefile
Now we need to generate the .config Linux kernel configuration
file. We can start from the default one:
$ make defconfig
Or we can reuse configuration files from the local installation with:
$ make olddefconfig
Note that make help provides the list of possible make commands.
For computers using (U)EFI, one may need to update the .config file
to support EFI handover. This is done by setting EFI stub support
when configuring the kernel (for instance with make menuconfig).
Processor type and features --->
[*] EFI runtime service support
[*] EFI stub support
Sources: stackoverflow and gentoo linux wiki.
Without that option activated, I ended up having the following error message when trying to boot my new kernel:
error: kernel doesn't support EFI handover
This option isn't required when building a kernel for a virtual machine.
In order to compile the kernel, (at least) the following dependencies are required:
- git
- gcc
- ncurses-devel
- elfutils-libelf-devel
- openssl-devel
- perl-interpreter
- rpm-build (if building rpm packages)
Then we can build the kernel as simply as that:
$ make
The straight forward approach to install the Kernel, if it has been built on the target machine is:
$ sudo make install
$ sudo make modules_install
We can now reboot on the newly built Kernel.
Building RPM package
We can even make RPMs to install the new kernel on any RPM based machine:
$ make binrpm-pkg
The packages are available in the ~/rpmbuild/RPMS/x86_64 directory:
$ ls ~/rpmbuild/RPMS/x86_64/
kernel-4.14.0efistub+-3.x86_64.rpm kernel-headers-4.14.0efistub+-3.x86_64.rpm
$
The newly built kernel can be installed with the standard rpm install command:
$ cd ~/rpmbuild/RPMS/x86_64/
$ sudo rpm -i kernel-4.14.0efistub+-3.x86_64.rpm
That's it, when rebooting, the new kernel is available in the grub menu (together with the previously installed kernels) .
$ dmesg | head -3
[ 0.000000] microcode: microcode updated early to revision 0x1c, date = 2015-02-26
[ 0.000000] Linux version 4.14.0efistub+ (florent@amn) (gcc version 7.2.1 20170915 (Red Hat 7.2.1-2) (GCC)) #3 SMP Sun Nov 19 22:52:23 CET 2017
[ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-4.14.0efistub+ root=/dev/mapper/fedora-root ro rd.lvm.lv=fedora/root rd.lvm.lv=fedora/swap rhgb quiet LANG=en_US.UTF-8
Tested with Linux 4.14.0 hash ed30b147e1f6e396e70a52dbb6c7d66befedd786