summaryrefslogtreecommitdiff
path: root/cap/sysconfig.tex
blob: 0a94d0e5311f03f6a1267769e8e7330482f68705 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
\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-<aktuelle kernel version> .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}