Building a Preemt-RT Kernel
Introduction
The kernel can be easily installed on a running system. During the boot process, the kernel is started with the latest version number by default. If you want to return to an old version, you can select the desired kernel version in the grub menu „Advanced options for Linux Mint“.
Preparation
sudo apt install libncurses5-dev build-essential libssl-dev
Get the preemt-rt patch
Check here whether a patch is available for your currently installed kernel.
If not, choose the next newer version and download the patch.
For example:
If you are running a 4.4.165 kernel choose the following patch:
patch-4.4.148-rt166-rc1.patch.gz
If you want to use a kernel version that is not already installed, please install the generic kernel with the correct version with this guide first.
Get the Linux sources
Clone the kernel
git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
Check out the same version as chosen for the patch
git checkout -b RTPatch tags/v4.4.148
Install the compatible generic kernel
For RT-patch v4.4.148-rt166-rc1 install generic kernel 4.4.0
Instructions
Build the kernel
Patch the kernel sources
Choose the build variant
This selection will affect, how many modules will be built.
The sizef and the range of functions of the monolitic kernel will not be changed.
Additional modules can be built and installed after the kernel is installed.
a.) Full module support (The easy way) A normal Linux distribution, like Ubuntu, will install a kernel and most of the available kernel modules. Many of them are never used, because they are drivers for hardware, which is not installed on the PC. This variant contains the same modules like a full Ubuntu kernel.
b.) Minimal: (The propper way) This will only build modules which are essential. Some basic functionality, like WiFi drivers, may be missing. Some common Ethernet drive are in the monolithic part of the kernel and will still work. You can add all modules you need manually. This method is recommended in order to obtain a system that is as stable as possible. If fewer drivers are loaded, there is less risk that an unused driver will cause high latency.
a.) Full module support
Copy the kernel configuration from the generic kernel.
Make sure you copy the correct config-file with the correct version (i.e.
config-4.4.0-040400-generic
)
cd <pathToKernelSrc>
cp /boot/<yourDistributionConfig> ./.config
Applay the configuration to the patched kernel sources.
make oldconfig
b.) Minimal
You have three different options:
1.) Configure the kernel to add only the bare minimum. Add all additional modules manually.
2.) Configure the kernel to add all modules, which are currently loaded on the host pc.
3.) Configure the kernel to add all modules, which are currently loaded on a different pc.
1.) Bare minimum
cd <pathToKernelSrc>
Depending on the CPU architecture:
X86 - 64bit make x86_64_defconfig
X86 - 32bit make i386_defconfig
See <pathToKernelSrc>/arch/<architecture>/configs
for more possibilities
Open the configuration menu make menuconfig
Add all modules and drivers you need.
2.) Copy module configuration from host
cd <pathToKernelSrc>
make localmodconfig
Open the configuration menu make menuconfig
Add all additional modules and drivers you need.
Note: Most modules are only loaded when they are needed.
3.) Copy module configuration from a different machine
On target machine (with generic kernel loaded):
lsmod > /tmp/mylsmod
On host:
cd <pathToKernelSrc>
Copy the 'mylsmod' file:
scp <targetUsername>@<targetHostname>:/tmp/mylsmod ./
make LSMOD=./mylsmod localmodconfig
Open the configuration menu make menuconfig
Add all additional modules and drivers you need.
Additional configurations
Open the configuration menu
make menuconfig
Enable the fully preemptible kernel (The path may be different depending on the kernel version)
Processor type and features —> Preemption Model /Voluntary Kernel Preemption (Desktop)) —> (X) Fully Preemptible Kernel (RT)
Kernel options —> Preemption Model (No Forced Preemption (Server)) —> (X) Fully Preemptible Kernel (RT)
Deactivate expert mode
General setup —> [ ] Configure standard kernel features (expert users)
Save the configuration and exit the menu
Make and install the kernel
This will going to take about an hour.
-
Compile modules
make modules -j8
Install kernel modules
sudo make modules_install
Install kernel
sudo make install
Reboot
Check with uname -a
the kernel version