\section{Systemkonfiguration} \label{sec:systemkonfigurationen} Es wird beschrieben, wie die f\"ur die Diplomarbeit verwendete Umgebung aufgesetzt wird. Desweiteren wird das verwendete embedded System vorgestellt. \subsection{Software} \label{sec:sysconfigSoft} Es wird die stable Distribution of The ACE ORB (TAO) Version 1.5, die Mono Entwicklungsumgebung und IIOP.NET 1.9beta1 unter Linux 2.6.1x mit Ingo Molnars RT\_ PREEMPT Patch aufgesetzt. \subsubsection[Linux mit RT\_ PREEMPT Patch]{Linux mit Ingo Molnars RT\_ PREEMPT Patch} \label{sec:rtpreempt} Damit der CORBA NamingService unter Linux per Multicast funktioniert, mu\ss : \begin{itemize} \item \emph{/etc/hosts}\footnote{Konfigurationsdatei: Zuordnung IP-Adressen zu Rechnernamen} die Gegebenheiten des lokalen Netzwerks wiederspiegeln. \item im Linux Kernel die Optionen \emph{IP:Multicasting}, \emph{IP Tunneling} und \emph{Multicast Routing} aktiviert sein. \end{itemize} Der RT\_ PREEMPT Patch sollte nur auf die vanilla Kernel Quellen angewendet werden. Die aktuellen vanilla Quellen k\"onnen von http://www.kernel.org heruntergeladen werden. Anschlie\ss end werden die Kernel Quellen in das Verzeichnis /usr/src/ entpackt. Der eventuell vorhandene Link auf die aktuellen Kernel Sourcen wird entfernt und ein neuer Link auf die aktuellen Kernel Sourcen erstellt: \begin{lstlisting} wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.tar.gz tar xzvf linux-2.6.18.tar.gz -C /usr/src/ cd /usr/src unlink linux ln -sf linux-2.6.18 linux cd linux \end{lstlisting} Nun wird an die Variable EXTRAVERSION in /usr/src/linux/Makefile die Zeichenfolge rtpreempt angeh\"angt: \begin{lstlisting} vi Makefile .. \end{lstlisting} Es ist darauf zu achten, dass der RT\_ PREEMPT Patch mit der selben Versionsnummer heruntergeladen wird, wie die zuvor heruntergeladenen vanilla Quellen. Vor dem eigentlichen Patchvorgang sollte zuerst ein dryrun durchgef\"uhrt werden, wenn dieser fehlerfrei verl\"auft kann der Kernel gepatcht werden: \begin{lstlisting} wget http://people.redhat.com/mingo/realtime-preempt/patch-2.6.18-rt7 patch --dry-run -p1 < patch-2.6.18-rt7 patch -p1 < patch-2.6.18-rt7 \end{lstlisting} Um nicht die ganze Kernelkonfigurationsarbeit zu wiederholen, kann die momentan aktuelle Kernelkonfiguration \"ubernommen werden. Es m\"ussen dann nur die mit dieser Version neu dazugekommenen Features konfiguriert werden. Um die Realtime Funktionalit\"at zu erhalten, sind die angegebenen Fragen entsprechend zu beantworten: \begin{lstlisting} cp /boot/config- .config make oldconfig High Resolution Timer Support (HIGH_RES_TIMERS) [N/y/?] (NEW) y Preemption Mode 1. No Forced Preemption (Server) (PREEMPT_NONE) 2. Voluntary Kernel Preemption (Desktop) (PREEMPT_VOLUNTARY) 3. Preemptible Kernel (Low-Latency Desktop) (PREEMPT_DESKTOP) (NEW) > 4. Complete Preemption (Real-Time) (PREEMPT_RT) (NEW) choice[1-4]: 4 /proc stats for preemptible RCU read-side critical sections (RCU_STATS) [Y/n/?] (NEW) y RT Mutex debugging, deadlock detection (DEBUG_RT_MUTEXES) [Y/n/?] (NEW) y Built-in scriptable tester for rt-mutexes (RT_MUTEX_TESTER) [N/y/?] (NEW) y Non-preemptible critical section latency timing (CRITICAL_PREEMPT_TIMING) [N/y/?] (NEW) y \end{lstlisting} Letzter Schritt ist das Kompilieren des Kernels und der Module, sowie das Anpassen des Bootmanagers. Es wird von der Benutzung von grub als Bootmanager ausgegangen. Weitere Hilfen zur grub Konfiguration unter \cite{grub}. \begin{lstlisting} make && make modules_install cp arch/i386/boot/bzImage /boot/kernel-rt cp .config /boot/config-rt cp System.map /boot/System.map-rt vi /boot/grub/menu.lst > title RT patched vanilla 2.6.18 > root (hd0,0) > kernel /kernel-rt root=/dev/sda2 \end{lstlisting} Nun kann das System neu gebootet werden. Es ist darauf zu achten, dass beim Systemstart der RT gepatchte Kernel ausgew\"ahlt wird. Zur Kontrolle, ob der Kernel auch tats\"achlich erfolgreich gepatched wurde, kann \"ubepr\"uft werden, ob die Prozesse zur IRQ Bearbeitung auf dem System ausgef\"uhrt werden: \begin{lstlisting} ps -alx | grep IRQ \end{lstlisting} \subsubsection{ACE} \label{sec:linuxace} Die folgenden Schritte zur Konfiguration von ACE/TAO sind eine Zusammenfassung von \cite{schmidt:taoinstall}. \begin{enumerate} \item Archiv entpacken \begin{lstlisting} cd /opt tar xzvf ACE+TAO.tar.gz cd ACE_wrappers mkdir 1.5 mv * 1.5 \end{lstlisting} \item Umgebungsvariablen setzen \begin{lstlisting} echo 'export ACE_ROOT=/opt/ACE_wrappers/1.5' >> /etc/profile echo 'export LD_LIBRARY_PATH=$ACE_ROOT/lib:$LD_LIBRARY_PATH' >> /etc/profile echo 'export PATH=$ACE_ROOT/bin:$PATH' >> /etc/profile source /etc/profile \end{lstlisting} \item Konfigurationsdateien erstellen \begin{lstlisting} echo '#include "ace/config-linux.h"' > $ACE_ROOT/ace/config.h echo 'include $(ACE_ROOT)/include/makeinclude/platform_linux.GNU' > $ACE_ROOT/include/makeinclude/platform_macros.GNU \end{lstlisting} \item In das Verzeichnis \emph{ACE} wechseln und \emph{ACE} \"ubersetzen \begin{lstlisting} cd $ACE_ROOT make \end{lstlisting} \end{enumerate} \subsubsection{gperf} \label{sec:linuxgperf} gperf wird von TAO f\"ur perfect hashing benutzt. \begin{enumerate} \item In das Verzeichnis \emph{gperf} wechseln und \emph{gperf} \"ubersetzen \begin{lstlisting} cd $ACE_ROOT/apps/gperf make \end{lstlisting} \end{enumerate} \subsubsection{TAO} \label{sec:linuxtao} \begin{enumerate} \item Umgebungsvariable setzen \begin{lstlisting} echo 'export TAO_ROOT=$ACE_ROOT/TAO' >> /etc/profile source /etc/profile \end{lstlisting} \item In das Verzeichnis \emph{TAO} wechseln und \emph{TAO} \"ubersetzen \begin{lstlisting} cd $TAO_ROOT make \end{lstlisting} \end{enumerate} \subsubsection{Mono Entwicklungsumgebung} Eine Mono Entwicklungsumgebung kann in allen aktuellen Linuxdistributionen mit dem mitgelieferten Paketmanager installiert werden. Es gen\"ugt, das Paket \emph{monodevelop} (eine grafische Entwicklungsoberfl\"ache) zu installieren. Es werden automatisch alle ben\"otigten Pakete als Abh\"angigkeiten mit installiert. \subsubsection{IIOP.NET} \begin{enumerate} \item IIOP.NET 1.9beta1 von \emph{http://iiop-net.sf.net} herunterladen \item entpacken und nach /opt kopieren \begin{lstlisting} unzip IIOP*.zip mv IIOP* iiop.net mv iiop.net /opt/ \end{lstlisting} \item IIOP.NET f\"ur Mono kompilieren \begin{lstlisting} cd /opt/iiop.net make -f Makefile.mono \end{lstlisting} \end{enumerate} \subsection[Hardware]{Beschreibung der Hardware: CPX} \label{sec:cpx} S\"amtliche Versuche wurden auf dem von Kontron \cite{kontron} speziell f\"ur TRUMPF Laser entwickelten embedded System durchgef\"uhrt. Das als CPX\footnote{Central Processor eXtandable} bezeichnete System wird in diesem Kapitel beschrieben. \begin{figure} \begin{center} \includegraphics[width=\textwidth]{./img/cpx.jpg} \caption{CPX, embedded System zur Steuerung der TRUMPF Festk\"orperlaser} \end{center} \hrule \end{figure} \subsubsection{technische Daten} \begin{description} \item[Prozessor:] Intel Celeron Mobile 600 MHz \item[Hauptspeicher:] 512 MB DDR \item[Grafik:] Intel 855GM Integrated Graphics Device \item[realtime Ethernet:] Intel PRO/100 direkt an Prozessor, IRQ 17 \item[PCI:] Intel 82801 PCI Bridge, 2 Texas Instruments PCI2050 PCI-to-PCI Bridge \item[IDE:] Intel 82801 IDE Interface \item[Ethernet:] 3 Schnittstellen Intel 8255 Fast Ethernet, gemeinsam IRQ 18 \item[USB 2.0:] 3 Controller Intel 82801DB \subsubsection{Operation Panel} \begin{figure} \begin{center} \includegraphics[width=\textwidth]{./img/panel.jpg} \caption{Bedienpanel zur Steuerung der TRUMPF Festk\"orperlaser} \label{img:op} \end{center} \hrule \end{figure} Das Operation Panel (Abb. \ref{img:op}) besteht aus einem 8 Zoll Touchscreen mit einer Aufl\"osung von 800 x 600 dpi\footnote{dpi - dots per inch}. Seitlich befinden sich 4 USB Anschl\"usse an die zu Servicezwecken Tastatur, USB-Stick etc. angeschlossen werden kann. EIN-, AUS- und NOTAUS-Schalter dienen der Betriebszustandssteuerung des Lasers. Ein Dreh-Dr\"uck-Knopf erleichtert die Navigation durch Men\"us. \subsubsection{digitale Ein- und Ausg\"ange} Eine CPX verf\"ugt \"uber 3 mal 8 Ein- und Ausg\"ange. Diese k\"onnen \"uber den Adressbereich 0x2c00 bis 0x7c00 via Memory Mapping gesetzt und ausgelesen werden. Bei einer Zustands\"anderung an einem digitalen Eingang wird IRQ 6 ausgel\"ost. Die Interruptserviceroutine versendet das RT Signal 24. \subsubsection{Ethernet} Die Ethernetschnittstelle, welche direkt an die CPU angebunden ist, ist f\"ur die Real-time Kommunikation gedacht. Ihr ist IRQ 17 zugewiesen. Die drei Ethernetschnittstellen, die \"uber den PCI Bus angebunden sind teilen sich IRQ 18. Eine dieser Schnittstellen ist f\"ur den Service konfiguriert. Ein DHCP Server verteilt an dieser Schnittstelle einem Servicelaptop eine definierte IP Adresse. Eine weitere Schnittstelle dient zur Integration der Lasersteuerung in das Firmennetzwerk. Die vierte Ethernetschnittstelle wird momentan nicht ben\"otigt. \end{description}