====== Patchen und Kompilieren eines Echtzeitfähigen Linux Kernel für den Phytec phyCORE-MPC5200B ======
Diese Anleitung beschreibt wie der Standard Linux Kernel mit einem echtzeitfähigen Patch modifiziert werden kann, und für den [[:Embedded Systems:MPC5200:phyCORE-MPC5200B-tiny:start]] oder [[:Embedded Systems:MPC5200:phyCORE-MPC5200B-IO:start]] von Phytec konfiguriert wird.
===== Vorbereitung =====
Als Erstes muss man sich für eine Version entscheiden. Die Version des Kernels muss mit der Version des Patches übereinstimmen. Im [[https://rt.wiki.kernel.org/index.php/Main_Page | Real-Time Linux Wiki]] sind die verfügbaren Patches unter "Documentation > Actively maintained PREEMPT_RT kernel patches" aufgelistet. In dieser Anleitung verwenden wir die Version 4.1.15.
Für die Cross-Compilation müssen alle Tools für die Cross-Toolchain installiert sein, siehe unter [[..:ubuntu:crosstoolchain:start | Anleitung für Ubuntu]] oder [[:software:linux:emdebian:cross-toolchain | Anleitung für Debian]]. Insbesondere muss GCC und die nCurses Bibliothek vorhanden sein.
===== Download der Sourcen =====
* Linux Kernel klonen: git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
* Die verfügbaren Versionen können angezeigt werden mit: git tag -l
* Gewünschter Tag auschecken: git checkout -b RTPatch tags/v4.1.15
* Download des passenden RT-Patch von [[https://www.kernel.org/pub/linux/kernel/projects/rt/ | Quelle RT-Patch]]. Zum Beispiel: [[https://www.kernel.org/pub/linux/kernel/projects/rt/4.1/older/patch-4.1.15-rt17.patch.gz | RT-Patch v4.1.15-rt17]]
* RT-Patch entpacken gunzip -k patch-4.1.15-rt17.patch.gz
* NTB MPC5200 Daten holen mit: git clone https://github.com/ntb-ch/linux-phycore-mpc5200b
* [[https://www.kernel.org/ | Source: Linux Kernel]]
* [[https://www.kernel.org/pub/linux/kernel/projects/rt/ | Source: RT-Patch]]
* [[https://rt.wiki.kernel.org/index.php/Main_Page | Real-Time Linux Wiki]]
* [[https://rt.wiki.kernel.org/index.php/RT_PREEMPT_HOWTO | Installation RT-Patch]]
===== Den Kernel patchen und compilieren =====
* In das Linux Kernel Verzeichnis wechseln
* RT-Patch anwenden: patch -p1 < ../downloads/patch-4.1.15-rt17.patch
* Jffs2 Patch anwenden: patch -p1 < ../linux-phycore-mpc5200b/kernel/jffs2.patch
* Notwendige Variable definieren: export ARCH=powerpc CROSS_COMPILE=powerpc-linux-gnu-
* Defaultkonfiguration aus //linux-phycore-mpc5200b.git// nach //.config// in Wurzelverzeichnis kopieren. cp ../linux-phycore-mpc5200b/kernel/linux-3.19/defconfig .config
* Kernel Konfiguration überprüfen und anpassen (siehe [[software:linux:linux-kernel_crosscompilieren|Linux-Kernel crosscompilieren]]): make menuconfig
* Im erscheinenden Menue: "Kernel options ---> **Preemption Model (No Forced Preemption (Server)) ---> (X) Fully Preemptible Kernel (RT)**" auswählen und Konfiguration speichern
* Je nach Hardware kann es sein, dass noch weitere Einstellungen angepasst werden müssen. Folgende Punkte müssen beachtet werden ([[http://stackoverflow.com/questions/17812548/cyclictest-for-rt-patched-linux-kernel | weitere Infos]]):
* Power management and ACPI otions ---> **[*] ACPI (Advanced Configuration and Power Interface) Support** ACPI muss aktiviert sein, aber alle Unteroptionen, die deaktiviert werden können müssen deaktiviert werden
* Power management and ACPI otions ---> CPU Freqency scaling ---> **[ ] CPU Frequency scaling** deaktivieren
* Power management and ACPI otions ---> CPU Idle ---> **[ ] CPU idle PM support** deaktivieren
* Kernel hacking ---> Memory Debugging ---> **[ ] Check for stack overflows** deaktivieren
* Um die Quelle von hohen Latenzen mit dem [[https://rt.wiki.kernel.org/index.php/Cyclictest#Run_it | Cyclictest ]] finden zu könnnen, müssen folgende Einstellungen aktiviert sein:
* CONFIG_PREEMPT_RT=y
* CONFIG_WAKEUP_TIMING=y
* CONFIG_LATENCY_TRACE=y
* CONFIG_CRITICAL_PREEMPT_TIMING=y
* CONFIG_CRITICAL_IRQSOFF_TIMING=y
* uImage compilieren: make uImage
* Das uImage wird im Ordner "KERNELDIR/arch/powerpc/boot" gespeichert