Open Source im professionellen Einsatz

Newsletter abonnieren
Seite durchsuchen

HEFTARCHIV | NEWS | E-BIBLIOTHEK | VIDEO | BLOGS | WHITEPAPER | EVENTS | ACADEMY | ABO | SHOP

user friendly

  Home  »  Heft & Abo  »  Heftarchiv  »  2006  »  06  »  Kern-Technik  

RSS-Feed der aktuellen News von Linux-Magazin Online Folgen Sie Linux-Magazin Online auf Twitter
Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark

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.

Tabelle 3:
Portierungsmerkmale ausgewählter Linux-Plattformen

 

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)

Infos

[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

Die Autoren

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.

Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark
Ähnliche Artikel
Kern-Technik Kernel- und Treiberprogrammierung mit dem Kernel 2.6 - Folge 43
Handliche Bibliotheken Optimale C-Bibliotheken für Embedded Linux
Exotische Architekturen Linux portieren
Schneller parallel? GNU Compiler Collection 4.2
Kern-Technik Kernel- und Treiberprogrammierung mit dem Kernel 2.6 -
Zwillingsforschung Technik, Marktübersicht und Grundlagen zu Mehrkern-Prozessoren
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)
Kommentare (0)