This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision | |||
|
realtime:documentation:howto:howto_rt_preemptrt_setup [2017/02/08 13:39] anna-maria delete - move into an own namespace |
— (current) | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== HOWTO setup Linux with PREEMPT_RT properly ====== | ||
| - | |||
| - | Linux in itself is not real time capable. With the additional | ||
| - | PREEMPT_RT patch it gains real-time capabilities. The sources have to | ||
| - | be downloaded first. After unpacking and patching, the kernel | ||
| - | configuration has to be adapted. Then, the kernel can be built and | ||
| - | started. | ||
| - | |||
| - | ===== Getting the sources ===== | ||
| - | |||
| - | First, the kernel version should be chosen. After this, take a look | ||
| - | if the PREEMPT_RT patch is [[https://www.kernel.org/pub/linux/kernel/projects/rt|available]] | ||
| - | for this particular version. | ||
| - | |||
| - | The source of the desired version has to be downloaded (for the Linux | ||
| - | kernel as well as for the PREEMPT_RT patch). This example is based on | ||
| - | the Linux kernel version 4.4.12. | ||
| - | |||
| - | $ wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.4.12.tar.xz | ||
| - | $ wget https://www.kernel.org/pub/linux/kernel/projects/rt/4.4/patch-4.4.12-rt19.patch.xz | ||
| - | |||
| - | After downloading, unpack the archives and patch the Linux kernel: | ||
| - | |||
| - | $ xz -cd linux-4.4.12.tar.xz | tar xvf - | ||
| - | $ cd linux-4.4.12 | ||
| - | $ xzcat ../patch-4.4.12-rt19.patch.xz | patch -p1 | ||
| - | |||
| - | ===== Configuring the kernel ===== | ||
| - | |||
| - | The only necessary configuration for real-time Linux kernel is the | ||
| - | choice of the "Fully Preemptible Kernel" preemption model | ||
| - | (CONFIG_PREEMPT_RT_FULL). All other kernel configuration parameters | ||
| - | depend on system requirements. For detailed information about how to | ||
| - | configure a kernel have a look at //Documentation/kbuild/kconfig.txt// | ||
| - | in the unpacked Linux kernel sources. | ||
| - | |||
| - | When measuring system latency all kernel debug options should be | ||
| - | turned off. They require much overhead and distort the measurement | ||
| - | result. Examples for those debug mechanism are: | ||
| - | |||
| - | * DEBUG_PREEMPT | ||
| - | * Lock Debugging (spinlocks, mutexes, etc. . . ) | ||
| - | * DEBUG_OBJECTS | ||
| - | * ... | ||
| - | |||
| - | Some of those debugging mechanisms (like lock debugging) produce a | ||
| - | randomized overhead in a range of some micro seconds to several | ||
| - | milliseconds depending on the kernel configuration as well as on the | ||
| - | compile options (DEBUG_PREEMPT has a low overhead compared to Lock | ||
| - | Debugging or DEBUG_OBJECTS). | ||
| - | |||
| - | However, in the first run of a real-time capable Linux kernel it might | ||
| - | be advisable to use those debugging mechanisms. This helps to locate | ||
| - | fundamental problems. | ||
| - | |||
| - | ===== Building the kernel ===== | ||
| - | |||
| - | Building the kernel and starting the kernel works similarly to a | ||
| - | kernel without PREEMPT_RT patch. | ||