Portable Hardware-Kommunikation
Gerade beim Zugriff auf Hardware muss der Programmierer die zwischen dem Hauptprozessor und der Peripherie ausgetauschten Daten mit Hilfe der vorgestellten Datentypen definieren und über die Makros umwandeln. Außerdem darf er die Zugriffe selbst nur über die bereitgestellten Funktionen »read[bwl]()« (read byte, word oder long) respektive »write[bwl]()« (write byte, word oder long) programmieren.
Unterstützt der Prozessor einen eigenen IO-Bereich (Portzugriff), kommen zusätzlich die Funktionen »in[bwl]()« respektive »out[bwl]()« in Frage. Die genaue Verwendung der Funktionen ist in einer früheren Kern-Technik-Folge [1] beschrieben. Dass die Breite des Port-Bereichs auf den Plattformen unterschiedlich ist (x86: 16 Bit, ARM: 32 Bit), bleibt für Programmierer transparent.
Allerdings ist darauf zu achten, ob die Hardware die über einen gemeinsamen Speicher ausgetauschten und in einer Datenstruktur zusammengefassten Variablen an spezifischen Adressen erwartet. Der Compiler legt nämlich einzelne Variablen einer Datenstruktur aus Gründen der Performance an so genannten ausgerichteten (aligned) Adressen ab.
Da ein 32-Bit-Prozessor ein anderes Alignment als ein 16-Bit-Prozessor aufweist, muss der Programmierer sicherstellen, dass die Variablen eine eindeutige Adressenlage besitzen. Das GCC-spezifische Schlüsselwort »__attribute__((packed))« hilft ihm dabei. Abbildung 4 stellt das Problem und die Verwendung des Schlüsselworts beispielhaft dar.

|
Abbildung 4: Mit Hilfe des Schlüsselworts »packed« kann der Programmierer Einfluss auf die Anordnung von Strukturelementen im Speicher nehmen.
|
Natürlich gibt es noch weitere Fallen. Doch der Linux-Kernel bemüht sich darum, dem Programmierer Portierungsfehler so schwer wie möglich zu machen. So sind im Kernel einige Datentypen über Typedefs abstrakt gehalten (»ssize_t«, »size_t«, »pid_t«, ...). Der Typ »ssize_t« beispielsweise ist, abhängig von der Plattform, entweder auf den Datentyp »int« oder aber auf »long« abgebildet. Deshalb sollte man im eigenen Code grundsätzlich die vordefinierten Datentypen verwenden.
Seitengröße
Auch die Seitengröße (Pagesize) führt schließlich noch zu Portabilitätsproblemen. Tabelle 3 zeigt, dass sie zwischen den verschiedenen Plattformen stark variiert. Einige Kernelfunktionen - zum Beispiel Funktionen des Gerätemodells (Sys-Filesystem) - übergeben jeweils eine Speicherseite. Das Einzige, worauf sich der Programmierer hier verlassen kann, ist, dass sie eine Minimalgröße von 4 KByte aufweist.
|
|
|
Name
|
Bezeichnung
|
Wortbreite
|
Größe (»long«)
|
Seitengröße
|
|
x86
|
i386
|
32 Bit
|
4
|
4 KByte
|
|
AMD64/EMT64
|
x86-64
|
64 Bit
|
8
|
4 KByte
|
|
Alpha
|
alpha
|
64 Bit
|
8
|
8 KByte
|
|
Arm/Strong ARM
|
arm26
|
32 Bit
|
4
|
32, 16 KByte
|
|
HP PA-Risc
|
parisc
|
32 oder 64 Bit
|
4/8
|
4 KByte
|
|
Etrax 100LX
|
cris
|
32 Bit
|
4
|
8 KByte
|
|
IA-64
|
ia64
|
64 Bit
|
8
|
4, 8, 16, 64 KByte
|
|
Mips
|
mips
|
32 oder 64 Bit
|
4/8
|
4, 8, 16, 64 KByte
|
|
Motorola 68xxx
|
m68k
|
32 Bit
|
4
|
4, 8 KByte
|
|
PowerPC
|
ppc
|
32 Bit
|
4
|
4 KByte
|
|
PowerPC64
|
ppc64
|
64 Bit
|
8
|
4 KByte
|
|
S390
|
s390
|
32 oder 64 Bit
|
4/8
|
4 KByte
|
|
Sun Sparc
|
sparc
|
32 Bit
|
4
|
4, 8 KByte
|
|
Ultra Sparc
|
sparc64
|
64 Bit
|
8
|
8, 64, 512, 4096 KByte
|
|
User Mode Linux
|
um
|
32 oder 64 Bit
|
4/8
|
4 KByte
|
Zum Abschluss die drei wichtigsten Regeln für plattformunabhängigen Code zusammengefasst: Auf die Datentypen achten, an der richtigen Stelle konvertieren und auf Hardware über Kernelfunktionen zugreifen. (ofr)
|
[1] Eva-Katharina Kunst, Jürgen Quade, "Kern-Technik", Folge 3: Linux-Magazin 10/03, S. 81
[2] Greg Kroah-Hartman: Writing Portable Device Drivers, [http://www.linuxdevices.com/articles/AT5340618290.html]
[3] Robert Love, " Linux Kernel Development", S. 321: Novell Press, 2. Auflage, 2005
[4] Corbet et.al., "Linux Device Drivers", S. 288: O\'Reilly, 3. Auflage, 2005
|
|
Eva-Katharina Kunst, Journalistin, und Jürgen Quade, Professor an der Hochschule Niederrhein, sind seit den Anfängen von Linux Fans von Open Source. Unter dem Titel "Linux Treiber entwickeln" haben sie zusammen ein Buch zum Kernel 2.6 veröffentlicht.
|
| Whitepaper |
|
The Role of Open Source in Data Integration
Obwohl in den letzten Jahren viele technische Fortschritte erzielt werden konnten, verfügen die meisten Datenintegrationsprozesse nach wie vor nur über eine sehr begrenzte Automatisierung. Das vorliegende White Paper von dem Industry Analyst Mark Madson wird zunächst ein grundlegendes Verständnis von Daten Integration vermitteln, die Vorzüge von Open Source Lösungen für Daten Integration erläutern und Ihnen professionelle Empfehlungen geben, damit Sie Ihre Integrationsjobs noch einfacher und produktiver gestalten können.
Download PDF (Registrierung erforderlich)
|
|
Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele (Folge 2)
Der zweite Teil des Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele White Papers beleuchtet anhand weiterer ausgewählter Case Studies die Implementierung von Open Source Datenintegration in der Praxis und benennt die daraus resultierenden Vorteile.
Download PDF (Registrierung erforderlich)
|
Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links"
nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedrucken Fassung entsprechen.
|