Tag-Archiv für 'Linux'

Hardware-PWM für Foxboard G20

Für bestimmte Anwendung, wie zum Beispiel die Steuerung von Gleichstrommotoren über einen Motortreiber, werden häufig PWM-Signale benötigt. Sollen diese mit Mikroprozessoren erzeugt werden ist die Umsetzung meist relativ einfach, da direkt PWM-Ausgänge genutzt werden können und diese einfach zu programmieren sind. Wenn das erzeugende System (z.B. Foxboard G20 mit ARM9) mit einem Betriebssystem wie Linux versehen ist, dann ist die Umsetzung von PWM-Ausgängen meist aufwendiger. Viele Lösungen nutzen dann das GPIO-Interface und erzeugen das PWM-Signal über ein Programm im Userspace. Diese Technik wird auch als Bit-Banging bezeichnet, da hier jede Veränderung am Pin in Software realisiert werden muss. Damit kann allerdings das Timing nur unzureichend eingehalten werden und es sind auch nur geringe Träger-Frequenzen möglich.

Besser Ergebnisse erzielt man mit einem PWM-Treiber, der die Timer-Einheiten des ARM9-Prozessors, in diesem Fall des Atmel AT91SAM9G20 nutzt. Im vorliegenden Kernel-Modul für das Foxboard G20 wird ein zwei-kanaliger 12-Bit-PWM-Generator mit Trägerfrequenz um die 10 kHz prototypisch umgesetzt. PWM0 ist an J7 Pin 9 verfügbar, PWM1 liegt an J7 Pin 10 an. Für die Signalmasse kann jeder Massepin genutzt werden.

Zum Kompilieren des Moduls muss das richtige Verzeichnis mit den Kernelquellen (vorkonfiguriert und kompiliert) in make_modul.sh eingetragen werden, momentan ist der Quellcode für Kernel 2.6.31 angepasst und es wird ein Cross-Compiler genutzt. Nach dem Kompilieren kann das Kernel-Modul auf das Zielsystem aufgespielt werden, das Laden erfolgt mit insmod.

Das Setzen des Duty-Cycle kann dann mit

echo 2048 > /sys/devices/platform/atmel_pwm/pwm0

beziehungsweise

echo 2048 > /sys/devices/platform/atmel_pwm/pwm1

durchgeführt werden. Für den Duty-Cycle können Werte im Bereich 1-4096 genutzt werden, dies entspricht einem Duty-Cycle zwische 0% und 100%.

Der Quellcode für den Hardware-PWM-Treiber steht unter at91_g20_pwm.tar.gz zur Verfügung.

Netzwerkverkehr aufzeichnen mit Netsniff-ng

Manche Programme sind bei der Analyse von Netzwerkproblemen wirklich nützlich, sind allerdings wenig bekannt und sollten deshalb weiterempfohlen werden. Netsniff-ng ist ein solches freies Werkzeug für Linux, welches dazu dient Netzwerkverkehr aufzuzeichnen, zu analysieren und wieder abzuspielen. Im Gegensatz zu Anwendungen wie tcpdump, ettercap oder wireshark nutzt Netsniff-ng allerdings eine relativ neue Technik um die Pakete von der Netzwerkkarte über den Betriebssystemkern in den Userspace zu befördern. Durch die Nutzung der Linux-eigenen RX_RING-Infrastruktur können Netzwerkpakete unter Vermeidung von unnötigen Kopieroperationen zügig weitergeleitet und weiterverarbeitet werden. Bei diesem Ansatz spricht man deshalb auch vom Zero-Copy-Ansatz, da zur Übergabe von Daten zwischen Betriebsystemkern und Applikation durch Memory-Mapping keine zusätzlichen Speicheroperationen notwendig sind. Die dazu erforderlichen Kernelanpassungen für Senden und Empfangen sind in aktuellen Versionen des Linux-Kernels (2.4.X und 2.6.X) bereits integriert.

Im Vergleich zu bewährten Programmen wie tcpdump erhöht sich die mögliche Aufzeichnungsrate mit Netsniff-ng dadurch deutlich. Wer erste Experimente mit der Software durchführen möchte sollte die stabile Version 0.5.5.0 benutzen. Das nächste Release durch die Entwickler ist im April 2011 geplant und wird unter anderem eine neue Parametersyntax für Kommandozeilenparameter und eine weitergehende Modularisierung der Quellcodebasis bieten um zusätzliche Werkzeuge mit der Technologie zu ermöglichen.

Die Installation von Netsniff-ng 0.5.5.0 erfolgt einfach mit

make
sudo make install

im src/-Verzeichnis des Programms.

Nach erfolgreicher Installation ist es möglich mit:

sudo netsniff-ng --dev eth0 --dump out.pcap --silent

Netzwerkverkehr aufzuzeichnen.

Bookmarks sychronisieren mit Firefox Sync

Ein Rechner am Arbeitsplatz, einer am privaten Schreibtisch und dann noch ein Handy: die Geräte mit welchen man das Internet nutzen kann sind vielfältig und verteilt. Möchte man dann beim Surfen die gleiche Lesezeichensammlung auf allen Geräten nutzen ist guter Rat teuer.

Aus diesem Grund ist für Firefox 3.6 seit einiger Zeit der Dienst Firefox Sync (ehemals Weave) verfügbar. Damit ist es möglich Lesezeichen, Passwörter, Einstellungen, die Browser-History und auch geöffnete Tabs zwischen unterschiedlichen Rechnern zu sychronisieren. Die Technologie, die für Firefox in der Version 3.6 noch ein Plugin erfordert, soll in Firefox 4.0 direkt integriert sein. Die Daten werden dann entweder in einer Mozilla-Datenbank oder auch auf dem eigenen Server gespeichert. Hierfür existiert eine freie Implementierung mit PHP und Mysql als Datenbank. Dabei sind zwei Dienste zu installieren, zum einen ein Dienst zur Nutzerverwaltung und dann noch der eigentliche Synchronierungsdienst. Notwendige Dokumentation findet sich unter Weave-API.

‘Bookmarks sychronisieren mit Firefox Sync’ weiterlesen

FOX Board G20

Für die Nutzung in Robotik-Experimenten war ich einige Zeit auf der Suche nach einem Starter-Kit als Kontrollplatine. Das System sollte rechenstark sein, wichtige Standardschnittstellen wie USB und Ethernet unterstützen, mit Linux laufen und mehrere, frei nutzbare Ein- und Ausgänge besitzen. Mit dem FOX Board G20 habe ich jetzt ein solches System gefunden.

Trotz des modularen Aufbaus aus dem Netus G20 CPU-Modul und einer Basisplatine mit Schnittstellen kann man das FOX Board G20 als Single Board Computer (SBC) auffassen. Single Board Computer sind Computersysteme, bei welchen alle notwendigen elektronischen Komponenten auf einer Leiterplatte zusammengefasst sind. Sie werden zumeist für Mess-, Steuer- oder Regelungszwecke genutzt. Der Sandwich-Aufbau des FOX Board ermöglicht den Neuentwurf der Basisplatine für spezifische Anwendungen und bietet damit eine erhöhte Flexibilität.

foxg20

Das Netus G20 CPU-Modul beinhaltet eine ARM9-basierte CPU, genauer den Mikrocontroller AT91SAM9G20 von Atmel mit einer Taktfrequenz von 400Mhz. Mit 64 MByte RAM und 8 MByte Flashspeicher ist das CPU-Modul gut ausgestattet. Bei Abmessungen von 40x40mm für das CPU-Modul und 66×72 mm für die Trägerplatine ist das Board sehr kompakt. Die Möglichkeit microSD-Karten direkt einzustecken erlaubt die flexible Verwendung in vielen Anwendungen. Für die Nutzung in Robotik-Projekten spricht die Tatsache, dass auf der Trägerplatine viele Signale über nachbestückbare Stiftleisten direkt zugänglich sind. Bei Nutzung der Standard-Software sind von den 80 Pins dann 28 vollständig frei als Ein- oder Ausgang (GPIO) nutzbar, die restlichen Pins stellen Schnittstellenfunktionen wie SPI oder I2C zur Verfügung. Natürlich kann das Board aber auch anders konfiguriert werden.

Die Softwareunterstützung für das System ist gut, der verwendete Mikrocontroller wird vom Linux-Kernel standardmäßig unterstützt. Als Laufzeitsystem sind auf Debian und Gentoo basierende Images für die microSD-Karte verfügbar. Mit 150 Euro für Basisplatine und CPU-Modul ist es auch gerade so noch erschwinglich, das komplette Starterkit mit ein paar Zusatzteilen wie Netzteil, Gehäuse und microSD-Karte und ähnlichen Dingen ist für ungefähr 240 Euro erhältlich. Ein besonderes Plus ist die aktuelle Dokumentation im Wiki von ACME Systems, welche die wichtigsten Fragen zum Start mit dem Modul klärt.

Speicherverbrauch unter Linux messen

Bei der Entwicklung oder Leistungsbewertung von Software ist die Bestimmung des Speicherverbrauchs eines Prozesses eine häufige Aufgabe. Durch die Nutzung von dynamisch geladenen Bibliotheken und die gemeinsame Nutzung von Speicherseiten durch mehrere Prozesse ist die genaue Bestimmung der verbrauchten Ressourcen eine Frage der Zählweise. Bei der Verwendung von bekannten Linux-Werkzeugen wie ps, htop oder top wird zumeist die Gesamtmenge aller durch einen Prozess verbrauchten virtuellen Speicherseiten gezählt. Die Bestimmung ist unabhängig davon, ob die zu Grunde liegenden physikalischen Speicherbereiche eventuell durch mehrere Prozesse gleichzeitig genutzt werden. Die gemessene Speichermenge wird dabei als Resident Set Size (RSS) bezeichnet. Durch die mehrfache Zählung wird die Auslegung der Speicherausstattung einer Maschine erschwert.

Das von Matt Mackall geschriebene Programm smem ist ein Werkzeug, das verschiedene Berichte über die Speichernutzung auf einem Linux-System erstellen kann. Im Gegensatz zu den bereits genannten Werkzeugen kann smem die Proportional Set Size (PSS) bestimmen. Die PSS ist eine weitere Messgröße für den Speicherverbrauch eines Programms, bei welcher die durch Bibliotheken genutzte Speichermenge gleichmäßig auf die nutzenden Applikationen aufgeteilt wird. Wird eine Bibliothek durch drei Programme genutzt, wird jeweils nur ein Drittel des durch die Bibliothek verbrauchten Speichers für die PSS der nutzenden Programme einkalkuliert. Neben der Bestimmung der PSS ist zusätzlich die Bestimmung der Unique Set Size (USS) möglich. Die USS eines Prozesses ist die Speichermenge, die nur durch diesen Prozess genutzt wird. Wird der entsprechende Prozess entfernt, wird auf dem System diese Speichermenge frei.
smem-by-pss-small
smem ist in Python geschrieben und benötigt mindestens Version 2.6.27 des Linux-Kernels, da erst dieser die notwendige Datei pagemap mit der Zuordnung von virtuellem zu physikalischem Speicher für jeden Prozess in /proc enthält. Neben der Auflistung von RSS, PSS, USS und verbrauchtem Swap-Speicher für Prozesse und Nutzer mit verschiedenen Filterkriterien beherrscht smem auch die Ausgabe von Torten- und Balkengrafiken als PNG, SVG, JPG und EPS. Das Programm ist allerdings im Moment noch nicht in allen Distributionen enthalten.

Diplomarbeit

Seit heute schreibe ich offiziell an meiner Diplomarbeit. In den nächsten vier Monaten werde ich das Thema “Entwicklung einer Prüfsoftware auf einer embedded i.MX31-Plattform mit Betriebssystem Linux” bearbeiten. Es geht darum, für ein Embedded-Board mit i.MX31-Mikrocontroller und sehr vielen unterschiedlichen Schnittstellen (CAN, Ethernet, USB als Host und als Client, mehrere Displayschnittstellen) und Onboard-Peripherie (verschiedene Flashspeicher, RTC und produktspezifische Schaltkreise) eine Software zu schreiben, die alle Komponenten ansteuert und auf Funktionalität testet. Das Ganze passiert in der Nähe von Ravensburg, deswegen wohne ich auch seit sechs Wochen zeitweise in Weingarten.

Sony Ericsson W850i mit Linux

Ich habe mir eine neues Mobiltelefon zugelegt, da mein altes Telefon defekt war. Meine Wahl fiel auf das Sony Ericsson W850i, da ich gute Erfahrungsberichte mit Telefonen von Sony Ericsson aus dem Freundeskreis erhalten hatte und ich bei Recherchen heraus fand, dass diese Handys von Linux gut unterstützt werden.

sony_ericsson_w850i

Zur Kommunikation eines Rechners mit dem Telefon kann man drei Varianten benutzen, zwei Varianten mit USB-Verbindung und eine Variante mit Bluetooth.

  1. Anstecken des Telefons mit dem beiliegenden USB-Kabel und Auswählen von Dateiübertragung im Telefon. In diesem Modus kann man Multimediadateien auf das Telefon kopieren, das als Mass-Storage-Device wie ein USB-Stick arbeitet. Auch die Installation von Java-Programmen ist so möglich. Einfach die *.jar-Dateien auf das Handy kopieren und dort im Dateimanager installieren. Ich habe gestern so gleich ohne Probleme Bloover, ein Werkzeug für mobile Bluetooth-Scans, installiert.
  2. Anstecken des Telefons mit dem USB-Kabel und auswählen von Telefonmodus. In diesem Modus wird ein USB-Modemdevice zur Verfügung gestellt, weitere Tests habe ich hier nicht gemacht.
  3. Kommunikation über Bluetooth. Bei der Installation von Bluetooth sind einige Sachen zu beachten, ich habe mich an dieser Bluetooth-Anleitung für Ubuntu orientiert.

Zur Synchronisation des Telefons mit anderen Rechnern benutze ich OpenSync. Für Ubuntu Edgy Eft habe ich deshalb ein weiteres Repository in /etc/apt/sources.list hinzugefügt:

deb http://www.in.fh-merseburg.de/~jahn/opensync-0.21/ edgy main

Aus diesem Repository habe ich libopensync*, msynctool und multisync-gui installiert. Zur Synchronisation mit dem Telefon benutze ich Evolution und IrMC (funktioniert auch für Bluetooth) in einer Syncronisationsgruppe (Konfiguration mit msynctool oder multisync-gui). Die Man-Page von msynctool erklärt ziemlich treffend wie zur Synchronisation vorzugehen ist. Wichtig ist, dass als Befehl zum Synchronisieren

msynctool –sync Gruppenname –filter-objtype note

mit dem Filter für Notizen verwendet wird, da sonst das Synchronisieren sofort fehlschlägt. Zur Konfiguration gibt es im Opensuse-Wiki noch mehr Informationen.

Mit dem Telefonwechsel war ein vollständiger Nummernwechsel verbunden. Die neuen Telefonnummern sind im Impressum vermerkt.

Umstieg von Gentoo auf Ubuntu

Ich habe diese Woche meine zwei Rechner mit Ubuntu 6.10 (Edgy Eft) installiert und damit Gentoo auf diesen Rechnern abgelöst. Die Installation verlief auf beiden Rechnern problemlos, nur der Dialog zur Platten-Partionierung war etwas hackelig, durch Neupartitionierung war das Problem aber zu lösen.

Das Installieren der Updates verlief zügig und ohne sichtbare Fehler. Auf dem Thinkpad mit SuperSavage-Grafik funktionierte Direct-Rendering Out-of-the-Box, beim Desktop musste ich noch die proprietären fglrx-Treiber von ATI installieren und konfigurieren. Bis jetzt fand sich sämtliche Software, die ich brauchte, in den verfügbaren Quellen.

Der Umstieg von Gentoo zu Ubuntu hatte folgende Gründe:

  • Gentoo ist im Moment nicht mehr so trendy wie noch vor zwei Jahren, viele Entwickler verlassen das Projekt und widmen sich anderen Distributionen. Die Pakete scheinen deswegen nicht mehr überall so gepflegt wie ich mir das vorstelle.
  • Da bei Gentoo aus dem Quellcode installiert wird benötigen Updates lange Compilerläufe, die mir persönlich jetzt zu lange dauern. Updates bei Bibliotheken können wenn Abhängigkeiten zu OpenOffice, Firefox oder X auftreten in wahre Compile-Marathons ausarten. Manchmal erscheinen dann weitere Updates bevor der letzte Compile-Lauf beendet ist.
  • Die Paketverwaltung bei Gentoo ist für Nutzer ausgelegt die Fehler und Sicherheitsmängel durch Updates auf neue oder neueste Programmversionen lösen. Das reine Fixen von Sicherheitsmängeln oder Fehlern bei Beibehaltung des Featureumfangs scheint bei Gentoo nicht unbedingt Priorität zu haben. Viel Entwicklerarbeit basiert auf den jeweilig neueste Softwarerevisionen. Ich möchte in Zukunft vor allem ein stabiles System mit halbwegs aktuellen Versionen.
  • Konfiguration ist bei Gentoo immer noch viel Handarbeit. Ich finde es sehr nützlich die Kommandozeile benutzen zu können, habe aber auch nichts gegen automatisierte, graphische Lösungen wo sie sinnvoll, funktional und effektiv sind. Bei Ubuntu erhoffe ich mir weniger Administrationsaufwand.

Generell bin ich mit Gentoo nicht unzufrieden gewesen, meine Ziele und Anforderungen haben sich aber dahingehend geändert, dass ich ein System möchte bei dem Stabilität vor Aktualität steht.

Natürlich hat der Wechsel auch ein paar Nachteile:

  • Subjektiv erscheint mir Ubuntu ein wenig langsamer als mein Gentoo, allerdings nicht soviel, dass ich es als störend empfinde. Hier kann man aber sicher noch ein paar Anpassungen vornehmen. Der empfundene Unterschied kann auch daher herrühren, dass ich gleichzeitig von XFCE auf Gnome gewechselt bin.
  • In Liferea werden anscheinend keine https-Anfragen unterstützt. Hier werde ich eventuell ein Nichtdistributionspaket installieren.
  • Das angesammelte Wissen über die Erstellung von ebuilds ist jetzt nutzlos, das Wissen zum Erstellen eigener Pakete für Ubuntu muss ich mir neu aneignen.

Bis jetzt scheint mir der Wechsel aber eine gute Entscheidung.

The Code Linux

Bei Google Video findet sich eine interessante Dokumentation über Linux und Open Source Software. Das ganze heißt The Code Linux und dauert ungefähr eine Stunde. Die Dokumentation stellt die Konzepte Freier Software vor und lässt eine Vielzahl von Kernel-Entwicklern zu Wort kommen. Bis auf wenige Teile sind die Interviews in Englisch.

Chemitzer Linux-Tage 2007

Am 3. und 4. März finden die wieder einmal Chemnitzer Linux-Tage statt. Eine Eintrittskarte kostet wie in den letzten Jahren 5 EUR bzw. ermäßigt 3 EUR und ist an beiden Veranstaltungstagen gültig. Karten können ohne Anmeldung direkt beim Besuch der Veranstaltung erworben werden. Die Veranstaltung umfasst an beiden Tagen jeweils 6 Vortragsstränge und viele Präsentationen.