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