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 phyCORE-MPC5200B-tiny oder phyCORE-MPC5200B-IO 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 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 Anleitung für Ubuntu oder 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 Quelle RT-Patch. Zum Beispiel: 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

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 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 ( 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 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