Installation und Anpassung von Linux auf einem Mini-ITX

Transcription

Installation und Anpassung von Linux auf einem Mini-ITX
Informatikprojekt
Installation und Anpassung von Linux
auf einem Mini-ITX-Board für einen
mobilen Roboter
Matthias Günther
26. Januar 2008
Betreut durch Prof. Dr. rer. nat. Wolfgang Ertel
Inhaltsverzeichnis
1 Einführung
3
2 Hardware-Analyse
3
3 Recherche
3.1 Kontron 986LCD-M/mITX . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Global American Inc 2801450 . . . . . . . . . . . . . . . . . . . . . . . . .
3
3
4
4 Entscheidung
4.1 Vergleich der möglichen mobilen Intel-Prozessoren . . . . . . . . . . . . .
4.2 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
4
5
5 Installation
5.1 Betriebssystem . . . . . . . . . . . . . . . . .
5.2 Kamera . . . . . . . . . . . . . . . . . . . . .
5.2.1 Benötigte Software / Treiber . . . . .
5.3 CAN . . . . . . . . . . . . . . . . . . . . . . .
5.3.1 Installation / Konfiguration . . . . . .
5.3.2 Probleme . . . . . . . . . . . . . . . .
5.4 WLAN . . . . . . . . . . . . . . . . . . . . . .
5.4.1 Konfiguration . . . . . . . . . . . . . .
5.4.2 Dauerhafter Ad-Hoc-Modus . . . . . .
5.4.3 Probleme und Lösungen . . . . . . . .
5.5 Corbenic . . . . . . . . . . . . . . . . . . . . .
5.5.1 Benötigte Pakete . . . . . . . . . . . .
5.5.2 Probleme / Lösungen . . . . . . . . .
5.5.3 Änderungen an den Corbenic-Quellen
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
5
6
6
7
7
8
8
9
9
9
10
10
10
10
6 Tests
11
A Bilder
12
2
1 Einführung
Bisher wird bei Kunibert1 ein normales ATX-Mainboard eingesetzt. Um Platz zu sparen
soll im Rahmen dieser Projektarbeit die Umstellung auf ein Mini-ITX-Board durchgeführt werden. Dazu gehört eine umfangreiche Recherche nach möglichen Boards, die
Installation des Betriebssystems, die Installation aller notweniger Treiber sowie die Installation von Corbenic2 selbst.
2 Hardware-Analyse
Kunibert ist mit folgenden Komponenten ausgestattet:
• Mainboard MSI 915GM Speedster-FA4
• Pentium M mit 1,7 GHz
• PCIe-Grafikkarte
• WLAN (über USB)
Um die Funktionalität des Roboters zu erhalten, müssen folgende Komponenten mit dem
neuen Board zusammenarbeiten:
• Kamera (FireWire)
• Grafikkarte zur Bildverarbeitung (PCI-Express)
• CAN-Bus (PCI)
• WLAN
3 Recherche
Zum Zeitpunkt der Recherche (August 2007) waren nur sehr wenige Mini-ITX-Boards
mit PCI-Express-Unterstützung zu finden. Geräte wie das „Kino-9454“ oder das „Commell
LV-673“ unterstützen mindestens eine der Voraussetzungen aus der Hardware-Analyse
nicht. Am Ende schafften es nur zwei in die engere Auswahl:
3.1 Kontron 986LCD-M/mITX
Ausstattung:
• 1x PCI-Express (16x)
• 1x PCI
• 1x Mini-PCI-Express
1
2
Kunibert ist der Name des Fußballroboters der Hochschule Ravensburg-Weingarten.
Corbenic ist die Bezeichnung für die Software-Plattform, die an der Hochschule RavensburgWeingarten im Robocup-Team entwickelt wird und auf Kunibert zum Einsatz kommt.
3
• FireWire
Bemerkung: Ein Umstieg auf die neuere Intel-Core-Mikroarchitektur wäre notwendig.
3.2 Global American Inc 2801450
Ausstattung:
• 1x PCI-Express (16x)
• 2x Mini-PCI
• FireWire
• CF Type-II Socket
Bemerkung: Auch bei diesem Board wäre ein Umstieg auf die neuere Intel-Core-Mikroarchitektur
notwendig. Außerdem hat dieses Board keinen PCI-Steckplatz. Dieses Problem ließe sich
allerdings durch eine der beiden folgenden Möglichkeiten beheben:
• Die vorhandene PCI-CAN-Karte über einen Adapter an einen der Mini-PCI-Anschlüsse
anschließen.
• Eine neue CAN-Karte für Mini-PCI kaufen und dementsprechend die CorbenicCAN-Schnittstelle anpassen.
4 Entscheidung
Angesichts der Tatsache, dass kein Mini-ITX-Board mit PCI-Express und FireWire für
den Betrieb mit einem Pentium M gefunden wurde, stellt sich die Frage, ob ein Wechsel
der Prozessorfamilie angebracht ist.
Problem bei dem Umstieg von Pentium M zu Core ist im Moment noch der Stromverbrauch.
4.1 Vergleich der möglichen mobilen Intel-Prozessoren
Core ist der Nachfolger der Pentium-M-Reihe. Bei der Core-Prozessorfamilie gibt es die
Varianten „Core Solo“ und „Core Duo“. Wie der Name schon sagt, besteht die DuoVariante aus zwei Kernen.
Da der Core also Nachfolger des Pentium M ist und sich die Fertigungstechnik verbessert
hat (PM 130nm/90nm Core 65nm) und einige Stromsparfunktionen eingebaut wurden,
sollte dieser bei gleicher Taktfrequenz sparsamer sein.
Wenn man sich einmal die Liste der mobilen CPUs unter www.notebookcheck.com3 anschaut, wäre für uns z.B. ein „Intel Core Duo L2400“ mit 1,66 GHz sehr interessant.
Da bei Corbenic viel mit Threads gearbeitet wird, könnten uns zwei Kerne einen guten
3
http://www.notebookcheck.com/Mobile-Prozessoren-Benchmarkliste.1809.0.html?
&deskornote=&or=&search=&sort=tdp&type=specs
4
Gewinn bei der Performance bringen. Diese CPU hätte sogar noch eine geringere Verlustleisung als der jetzige Pentium M (9W zu 21W). Leider werden diese stromsparenden
CPUs noch nicht einzeln verkauft.
Wenn wir in der Liste weiter nach oben schauen und den nächsten Core suchen, stoßen
wir auf den „Core Solo T1300“ ebenfalls mit 1,66 GHz (aber nur mit einem Kern) und
einer Verlustleistung von 27W (im Gegensatz zum bisherigen Pentium M mit 21W). Diese
CPU ist einzeln lieferbar.
Falls wir einen Core wollen, der uns in der parallelen Verarbeitung unterstützt, suchen
wir weiter und finden dann den „Core Duo T2350“ mit 1,86 GHz und einer Verlustleistung
von 35W. Diese CPU ist ebenfalls lieferbar.
Die Verlustleisungen der hier verglichenen CPUs sind nicht sehr weit auseinander. Eine
normale Desktop-CPU hat beispielsweise eine Verlustleistung von 65W bis 130W.
4.2 Fazit
Bei einem Umstieg auf Mini-ITX sind wir dazu gezwungen von Pentium M zur neueren
Core-Prozessorfamilie zu wechseln. Das bedeutet wiederum, dass am Anfang mit einem
höheren Stromverbrauch zu rechnen ist, da die stromsparenden CPUs dieser Prozessorfamilie noch nicht einzeln verkauft werden. Die CPUs auf den beiden vorgeschlagenen
Boards könnten zu einem späteren Zeitpunkt ohne Probleme gegen eine der stromsparenden Variante ausgetausch werden. Sollten diese Prozessoren niemals einzeln verkauft
werden, könnte man diese auch aus einem günstigen gebrauchten Notebook ausbauen.
Da das Board von Kontron alle Voraussetzungen ohne weitere Anpassungen erfüllt, wurde
es mit den zusätzlich benötigten Komponenten bestellt:
• Board (986LCD-M/mITX) von Kontron
• Intel Core Duo CPU (Yonah)
• DDR2-RAM
• Intel PRO/Wireless 3945ABG (PCIe Mini Card)
• WLAN-Antenne
Wegen Lieferschwierigkeiten des Kontron-Boards konnte ich erst Mitte November (2007)
an diesem Projekt weiterarbeiten.
5 Installation
5.1 Betriebssystem
Zum Einsatz soll ein auf Debian basierendes System kommen. Eine Installation von
CD war nicht möglich, da am einzigen IDE-Anschluss eine Notebook-Festplatte mit einem speziellen Kabel (nur ein Anschluss, da mit Stromversorgung) notwendig war. Als
5
Alternative wurde von einem USB-Stick installiert4 . Nach der Installation von Debian
4.0 wurden die Onboard-LAN-Anschlüsse nicht erkannt. Daraus ergaben sich zwei Möglichkeiten: Entweder die nötigen Treiber manuell zu installieren, oder eine Distribution
mit aktuelleren Treibern verwenden. Ich habe mich dafür entschieden die aktuelle Version 7.10 von Ubuntu5 zu installieren. Nach der Installation von Ubuntu wurden die
Onboard-LAN-Anschlüsse ohne Probleme erkannt. Um das Arbeiten auf dem Roboter
etwas komfortabler zu gestalten, wurde eine grafische Oberfläche (Gnome) mitinstalliert.
Einige Einstellungen wie z.B. 3D-Desktop oder Suchindex wurden deaktiviert. Der Benutzer lautet „Kunibert“, das Passwort ist dasselbe wie bei der bisherigen Installation.
5.2 Kamera
Bei der Kamera handelt es sich um die DFK 31AU036 der Firma „The Imaging Source Europe GmbH“. Sie wird über FireWire angeschlossen und liefert ihre Bilder über
DCAM7 . DCAM ist ein Standard der festlegt, wie Kameras unkomprimierte Bilddaten
ohne Audioanteil ausgeben.
5.2.1 Benötigte Software / Treiber
• libdc1394 : Bibliothek um FireWire-Kameras anzusprechen
• coriander : GUI um über libdc1394 FireWire-Kameras zu steuern und um Bilder
anzuzeigen
Ich habe die zu diesem Zeitpunkt aktuelle Version libdc1394-2RC9 verwendet. In diesem
Release-Candidate wurde das API im Vergleich zur aktuell bei Corbenic eingesetzten
Version libdc1394-2RC7 erneut geändert. Diese aktuelle Version ist im Repository der
Distribution noch nicht enthalten. Die Bibliothek muss also aus den Quellen gebaut
werden. Hierzu laden wir uns das Paket von der Projektseite8 auf Sourceforge herunter
und entpacken es. Mit folgenden Befehlen wird die Bibliothek im System installiert:
Listing 1: libdc1394 installieren
# ./ configure
# make
# make i n s t a l l
Eventuell vorhandene ältere Versionen sollten zuvor komplett deinstalliert werden.
Da sich selbst gebaute Pakete unter einem eigenen Pfad installieren, müssen wir diesen
noch in /etc/ld.so.conf einfügen:
Listing 2: /etc/ld.so.conf
...
/ usr / l o c a l / l i b
4
http://www.debian.org/releases/stable/i386/ch04s04.html.de
Ubuntu basiert auf Debian und enthält viele Treiber-Patches um gut auf aktueller Hardware zu laufen
6
http://www.theimagingsource.com/de/products/cameras/usb_color/dfk31au03/overview/
7
„1394-based Digital Camera Specification“ http://de.wikipedia.org/wiki/DCAM
8
http://sourceforge.net/projects/libdc1394/
5
6
Änderungen an dieser Datei muss man dem System noch mitteilen:
Listing 3: ld.so.conf neu einlesen
# ldconfig
Um die zugehörigen Module beim Systemstart zu laden, schreiben wir diese in /etc/
initramfs-tools/modules. Die dort hinterlegten Module werden bereits vor dem Mounten des RootFS geladen.
Listing 4: /etc/initramfs-tools/modules
spb2
raw1394
video1394
ohci1394
ieee1394
Nach einer Änderung in dieser Datei muss man das INITRAM neu schreiben.
Listing 5: initramfs updaten
# update−i n i t r a m f s −u −k 2.6.22 −14 − g e n e r i c
5.3 CAN
5.3.1 Installation / Konfiguration
Die im Robocup-Labor vorhanden Treiber konnten nicht mit dem neuen Kernel kompiliert werden. Auf Anfrage wurden mir die aktuellen Linux-Treiber9 von IXXAT zugeschickt. Selbst damit gibt es mit dem aktuellen Kernel10 Probleme. Versucht man im
Verzeichnis drv_act die Kernel-Module zu bauen (make), wird die Datei linux/config.h
nicht gefunden. Diese Datei war nur bis zur Version 2.6.18 im Kernel zu finden11 . Wir
müssen daher die Datei can_act.c abändern:
Listing 6: drv_act/can_act.c
...
//# i n c l u d e <l i n u x / c o n f i g . h>
#i n c l u d e <l i n u x / a u t o c o n f . h>
...
Weitere Änderungen, wie in der Installationsanleitung von Tobias Oberhofer12 beschrieben, müssen nicht mehr durchgeführt werden. Diese sind bereits in der neuen Version
enthalten.
Für den Rest der Installation kann man sich an die Anleitung von IXXAT halten13 .
9
bci-4.4.4-Linux-2.6.tgz
Kernel 2.6.22-14-generic aus dem Ubuntu-Repository
11
http://lxr.linux.no/source/include/linux/config.h?v=2.6.18
12
Oberhofer, Tobias (2006): „Installationsanleitung CAN Schnittstellenkarte“,
on_IXXAT_CAN_V0_03.pdf, 2. Installation (6)
13
1.02.0252-Manual-E_V1.4.pdf, im Treiber-Archiv enthalten, 3.1.5
10
7
Installati-
Nach dem Installieren von module-init-tools und den zugehörigen Abhängigkeiten aus
dem Repository, kann man mit folgenden Befehlen in den Verzeichnissen drv_act und
bci den CAN-Treiber installieren:
Listing 7: CAN-Treiber installieren
# make
# make i n s t a l l
Um den CAN-Treiber beim Systemstart zu laden, fügen wir folgenden Eintrag in /etc/
modules ein:
Listing 8: /etc/modules
can_act type=PCI pci_num=0
Nun muss man noch dafür sorgen, dass die passende Gerätedatei unter /dev erstellt wird.
Dafür gibt es den Befehl mknod mit den Parametern Major- und Minor-Nr. Die Major-Nr
beschreibt den Geräte-Typ und kann - in unserem Fall - nach dem Systemstart aus /var/
log/dmesg ermittelt werden. Sie lautet hier 253. Die Minor-Nr ist die Nummerierung
unterhalb der Major-Nr. Für das erste Gerät lautet sie also 0. Mit c geben wir an, dass
wir ein Charakter-Device ansprechen wollen.
Listing 9: CAN-Gerätedatei temporär erstellen
# mknod / dev / can0 c 253 0
Dieser Eintrag geht aber nach dem nächsten Neustart verloren, da es sich bei /dev um
ein temporäres Dateisystem handelt. Um den Eintrag bei jedem Neustart zu erstellen,
muss die Gerätedatei unter /lib/udev/devices/ erstellt werden:
Listing 10: CAN-Gerätedatei dauerhaft erstellen
# mknod / l i b / udev / d e v i c e s / can0 c 253 0
Bei jedem Neustart werden die Gerätedateien unter /lib/udev/devices/ nach /dev/
kopiert14 .
5.3.2 Probleme
Bei der Installation habe ich zuerst unsere CAN-Ersatzkarte verwendet und musste dann
feststellen, dass diese defekt war. Für die restliche Projektarbeit wurde dann die funktionierende CAN-Karte von Kunibert verwendet.
5.4 WLAN
Hier kommt eine Intel Pro Wireless 3945ABG (PCI Express Mini Card) zum Einsatz.
Auf der Unterseite des Boards ist dafür ein Steckplatz vorhanden. Diese Karte unterstützt
auch den Ad-Hoc-Modus, bei dem kein Access-Point benötigt wird.
14
siehe /etc/init.d/udev
8
5.4.1 Konfiguration
Im NetworkManager muss WLAN deaktiviert werden. In der Konsole kann dann mit
folgenden Befehlen ein Ad-Hoc-Netz erstellt werden:
Listing 11: Ad-Hoc-Verbindung erstellen
# i w c o n f i g e t h 1 e s s i d kuni mode ad−hoc c h a n n e l 10
# i f c o n f i g e t h 1 1 9 2 . 1 6 8 . 1 . 5 netmask 2 5 5 . 2 5 5 . 0
In diesem Beispiel wird angenommen dass die ESSID, der Kanal und die IP noch frei
sind.
Folgende Befehle sind im Zusammenhang mit der WLAN-Konfiguration hilfreich:
Listing 12: verfügbare WLANs anzeigen
# i w l i s t eth1 scan
Listing 13: aktuelle WLAN-Einstellungen anzeigen
# i w c o n f i g eth1
5.4.2 Dauerhafter Ad-Hoc-Modus
Um den Ad-Hoc-Modus automatisch nach dem Systemstart einzurichten, wird das folgende kleine Skript verwendet:
Listing 14: /home/scripts/init_wlan.sh
#!/ b i n / sh
/ s b i n / i w c o n f i g e t h 1 e s s i d kuni mode ad−hoc c h a n n e l 10
/ s b i n / i f c o n f i g e t h 1 1 9 2 . 1 6 8 . 1 . 5 netmask 2 5 5 . 2 5 5 . 2 5 5 . 0
Es wird durch eine kleine Änderung in der passenden Udev-Regel aufgerufen:
Listing 15: /etc/udev/rules.d/70-persistent-net.rules
# PCI d e v i c e 0 x8086 : 0 x4222 ( ipw3945 )
# SUBSYSTEM=="n e t " , DRIVERS=="?∗", ATTRS{ a d d r e s s }=="00:1b : 7 7 : e0
: 7 b : d8 " , NAME="e t h 1 "
SUBSYSTEM=="n e t " , DRIVERS=="?∗", ATTRS{ a d d r e s s }=="00:1b : 7 7 : e0 : 7 b
: d8 " , NAME="e t h 1 " , RUN+="/home/ s c r i p t s / i n i t _ w l a n . sh "
5.4.3 Probleme und Lösungen
Bei der WLAN-Konfiguration mit dem NetworkManager (GUI) konnte keine Ad-HocVerbindung erstellt werden. Über die Konsole (wie oben angegeben) war es aber problemlos möglich.
Eine WLAN-Fehlermeldung in dmesg (Boot-Log)
9
i n t e l _ r n g : FWH not d e t e c t e d
kann durch ein Blacklisting behoben werden:
Listing 16: /etc/modprobe.d/blacklist
...
b l a c k l i s t intel_rng
...
5.5 Corbenic
Sind alle Komponenten mit den benötigten Treibern korrekt installiert, ist die Installation
von Corbenic selbst möglich. Allerdings bemerkt man oft erst an diesem Punkt, was nicht
ganz richtig installiert ist, oder was noch fehlt.
5.5.1 Benötigte Pakete
Folgende Pakete müssen mit ihren Abhängigkeiten installiert werden:
• build-essential (enthält eine Reihe von Standard-Tools wie z.b. gcc)
• dialog (für das configure-Skript)
• libsigc++-2.0-dev
• libboost-python-dev
• python2.5-dev
• liblog4cpp4-dev
5.5.2 Probleme / Lösungen
Das configure-Skript hat keine Standardeinstellungen für die einzelnen Menüpunkte. Außerdem werden bei einem erneuten Aufruf die vorherigen Einstellungen nicht verwendet, sondern alle Parameter wieder zurückgesetzt. Es hilft, wenn man sich nach dem
configure-Aufruf die Datei Makefile.cvar ansieht. Die Parameter sollten hier gesetzt sein,
sonst kommt es in dem entsprechenden Modul zu Fehlern. Hat man einmal die richtigen
Werte gefunden, empfiehlt es sich eine Kopie dieser Datei zu erstellen.
5.5.3 Änderungen an den Corbenic-Quellen
Im Rahmen dieser Projektarbeit wurden kleine Änderungen an den Corbenic-Quellen
vorgenommen. Da die aktuellen Distributionen und andere Pakete (wie z.B. Boost) auf
die neue Python-Version 2.5 setzen, habe ich die nötigen Änderungen an den Makefiles
und dem configure-Skript vorgenommen. Im configure-Skript kann man nun über einen
Menüpunkt auswählen, ob man mit Python 2.4 oder 2.5 kompilieren möchte.
10
Wie bereits erwähnt, hat sich das API der libdc1394-2 erneut geändert. Die Anbindung von Corbenic an die Kamera musste folglich angepasst werden. Notwendig waren dazu Änderungen im Verzeichnis src/sensors/vision/. Hier wurden die Dateien
Camera1394.cpp und Camera1394.h geändert. Beim Erscheinen der stabilen Version 2.0
der Bibliothek sollte diese Anbindung noch einmal überarbeitet werden.
6 Tests
Tests wurden immer wieder nach der Installation der einzelnen Komponenten durchgeführt. Der CAN-Treiber bringt ein eigenes Testprogramm mit und die Kamera kann mit
coriander auf ihre Funktion geprüft werden.
Für einen Abschlusstest wurde die an Kunibert montierte Kamera über FireWire an
das neue Board angeschlossen, um das richtige Bild über den Spiegel zu bekommen.
Außerdem war an der CAN-Karte ein weiterer PC mit einem CAN-BUS-Analyzer angeschlossen. Wird nun Corbenic gestartet, ist auf dem Bildschirm am neuen Board das
bereits bearbeitete Bild der Kamera zu sehen, auf dem der Ball (oder ein sonstiger roter
Gegenstand) markiert wird. Wird dieser Gegenstand nun bewegt, kann man auf dem
angeschlossenen CAN-Analyzer die Veränderungen auf dem CAN-Bus erkennen.
11
A Bilder
Abbildung 1: Das neue Mini-ITX-Board mit Grafik- und CAN-Karte.
Abbildung 2: Die Rückseite mit eingesteckter Kamera (FireWire - schwarz) und CAN (rechts
/ blau).
12