Open Source im professionellen Einsatz
Linux-Magazin 03/2010

Kernel- und Treiberprogrammierung mit dem Kernel 2.6 - Folge 50

Kern-Technik

,

Zum Jubiläum: Pinguine, die ins Gefängnis kommen, und Anleitungen, die Programmierer verbrennen sollten: Der Linux-Kernel bietet auch Nicht-Entwicklern allerlei Kurzweiliges.

875

Was haben ein Mobiltelefon, ein Supercomputer, Fernseher, Netbooks und Armbanduhren, ein Flaschenrücknahme-Automat und Navigationsgeräte sowie der Rechner von Chefredakteur Jan Kleinert gemeinsam? Alle verwenden Linux als Betriebssystemkern. Diese wichtige Komponente liefert problemlos Stoff für jede Menge Magazinartikel. Nach 49 Folgen Technik wird es nun Zeit für eine Zäsur: Diese Kern-Technik befasst sich mit Sonderbarem, Kurzweiligem und Statistischem rund um den Kernel.

Von allem gibt es genug, schließlich ist es ein Projekt der Superlative: Gemäß der Studie "Linux Kernel Development", herausgegeben im August 2009 von der Linux-Foundation [1], haben 5000 Programmierer aus allen Teilen der Welt rund sechs Millionen Zeilen Code erstellt, 500 Firmen sind beteiligt, darunter mit 20 000 Zeilen auch Microsoft, die Linux ehemals als Krebsgeschwür bezeichneten. Täglich kommen rund 12 000 Zeilen Code neu hinzu.

Netto beträgt der Zuwachs allerdings nur 7000 Zeilen, denn 5000 Zeilen entfernen die Maintainer täglich. 2500 Zeilen erfahren im 24-Stunden-Rhythmus eine Modifikation. Alle zwölf Minuten kommt ein neues Patch hinzu. Das summiert sich auf gut 10 000 Patches für eine neue Kernelversion (siehe Kasten "Abfallprodukt Git").

Diese Codezeilen sind durchaus ein paar Blicke wert: Der aus Klassen und Objekten realisierte Kern ist ein Zeichen dafür, dass Objektorientierung nicht eine Sache der Programmiersprache ist, sondern primär eine des Kopfes. Die Objekte sind im Linux-Kernel als Datenstrukturen (»struct«) implementiert, Methoden als Funktionspointer.

Abfallprodukt Git

Torvalds hat nicht nur die Erfolgsstory "Linux-Kernel" geschrieben. Quasi als Abfallprodukt der Kernelentwicklung ist das Source-Control-System Git berühmt geworden. Der in Oregon lebende Finne hat mit Git nicht nur vorhandene Systeme nachgebaut und in Grundstrukturen oder Details verbessert, sondern hat mit seinen lokalen Repositories eine neue Art der Sourcecode-Verwaltung konzipiert und realisiert. Es vergeht kaum ein Monat, in dem nicht ein bekanntes Projekt auf Git umsteigt, um damit seine Quelltexte zu verwalten.

Code ordentlich notieren

Auch Linux-Interessierte, die nicht täglich zu Editor und Compiler greifen, entdecken bei genauem Hinschauen unterhalb von »/usr/src/linux-Version/« viel Interessantes. Selbst mit nur begrenzten Programmierkenntnissen finden sie sich recht gut zurecht, denn gemessen an der Zahl der beteiligten Entwickler herrscht ein erfreulich einheitlicher Stil. Das ist nicht zuletzt der Kodier-Richtlinie von Linus Torvalds zu verdanken, die er im Verzeichnis »Documentation/« unter dem Namen »CodingStyle« ablegte.

In der C-Welt konkurrieren - vereinfacht ausgedrückt - der GNU-Stil mit dem der C-Erfinder Kernighan und Ritchie [2]. Während Klammern bei im GNU-Stil geschriebener Software mittig zum Schlüsselwort stehen, ordnen Kernighan und Ritchie die schließende Klammer der jeweiligen Schlüsselwort-Ebene zu (siehe Listings 1 und 2). Vorteil: Der beim Programmieren sichtbare Bildschirmausschnitt zeigt mehr relevante Codezeilen. Linus Torvalds hat hierzu Stellung genommen: Wer sich für den Linux-Kern interessiert, sollte zumindest den Anfang des Dokuments lesen und seine Anweisungen befolgen (siehe Abbildung 1). Torvalds vielleicht größte Leistung dabei ist das Augenmaß: Trotz seiner Vorgaben toleriert der Linux-Erfinder auch gewisse Abweichungen.

Abbildung 1: Die Anweisung ist eindeutig und die Message klar: Der GNU-Programmierstil verträgt sich nicht mit dem Linux-Kernel. Im weiteren Text schlägt Torvalds jedoch auch versöhnlichere Töne an.

Listing 1:
K&R-Stil

01 int f(int x, int y, int z)
02 {
03         if (x < foo(y, z)) {
04                 haha = bar[4] + 5;
05         } else {
06                 while (z) {
07                         haha += foo(z, z);
08                         z--;
09                 }
10                 return ++x + bar();
11         }
12 }

Listing 2: GNU-Stil

01 int f (int x, int y, int z)
02 {
03     if (x < foo (y, z))
04         haha = bar[4] + 5;
05     else
06       {
07         while (z)
08           {
09             haha += foo (z, z);
10             z--;
11           }
12         return ++x + bar ();
13       }
14 }

Rekordhalter

Wie es bei einem so umfangreichen Projekt zu erwarten ist, lesen nicht alle Programmierer die Kodier-Richtlinien, geschweige denn, dass sie sie verinnerlichen. Das verdeutlicht beispielsweise die Analyse der Codezeilen-Längen. Linus Torvalds wünscht sich keine Zeilen mit mehr als 80 Zeichen. Erfahrene Programmierer kennen das: Lange Zeilen sind nicht nur am Bildschirm unübersichtlich, insbesondere die gedruckte Version ist unbrauchbar.

Und im Linux-Kernel? Mit 1992 Zeichen in einer einzigen Zeile hält die Quellcodedatei »APCI1710_Tor.c« einen traurigen Rekord. Und einen weiteren außerdem, nämlich bezüglich der Anzahl der Bedingungen innerhalb einer einzelnen If-Abfrage (siehe Abbildung 2). Was die Entwickler zu diesem Superlativ geritten hat, ist nicht überliefert, doch zur Ehrenrettung von Linus und seinen Mannen: Die Datei befindet sich noch im Staging-Zweig des Kernels.

Abbildung 2: Abschreckend: Die längste Codezeile im Kernel 2.6.32 prüft eine Konfigurationseinstellung.

Ansonsten hat im Linux-Kernel eine Zeile im Durchschnitt eine Länge von 28 Zeichen, obwohl es außerhalb des Staging-Zweiges durchaus einzelne Dateien gibt, etwa die Registerdefinitionen eines Ethernet-Controllers in »arch/blackfin/mach-bf537/include/mach/defBF537.h«, die mit im Schnitt 90 Zeichen pro Zeile deutlich zu lang sind. Bezüglich der Länge einer einzelnen Quellcodedatei haben die Kernelentwickler keine Einschränkungen formuliert. Die längste Datei - betrachtet man die Anzahl der Zeilen - ist mit 17 664 Zeilen die Datei »sound/pci/hda/patch_realtek.c« (siehe Tabelle 1). Sie implementiert den Realtek-HD-Audio-Codec und initialisiert Datenstrukturen zur Konfiguration für verschiedenste Hardwareplattformen, vor allem auf diversen Notebooks.

Tabelle 1: Die
längsten Dateien im Kernel 2.6.32

 

Zeilenanzahl

Datei

17664

sound/pci/hda/patch_realtek.c

15071

drivers/isdn/hardware/eicon/message.c

14344

drivers/net/tg3.c

13947

fs/nls/nls_cp949.c

12826

drivers/scsi/advansys.c

12279

drivers/net/bnx2x_main.c

12020

drivers/net/wireless/ipw2x00/ipw2200.c

11727

drivers/scsi/lpfc/lpfc_sli.c

11260

drivers/video/sis/init301.c

11165

drivers/scsi/aic7xxx_old.c

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • In eigener Sache: Kern-Technik 2014, das superdicke Kernel-Paket

    Über 330 Seiten umfasst das aktualisierte PDF-Paket zur Linux-Magazin-Serie Kern-Technik rund um den Linux-Kernel. Der Leser erhält die bisher erschienenen 74 Folgen der Reihe ohne DRM, dafür mit Quelltext.

  • In eigener Sache: Themenpaket "Kern-Technik" I mit 49 Folgen

    Über 200 Seiten Kernel-Know-how aus 6 Jahren Linux-Magazin bringt "Das große Themenpaket Kern-Technik (Folge 1 - 49)" im ansehnlichen PDF-Layout (mit Lesezeichen) auf den heimischen Rechner. Die anspruchsvolle Artikelserie behandelt Funktionsweise und Programmiertechnik des Linux-Kernels. Immer wieder angefragt, ist das Kraftpaket jetzt als Komplettversion verfügbar.

  • Kern-Technik

    Den Kern eines laufenden Betriebssystems zu debuggen war und ist problematisch. Doch der Emulator Qemu ermöglicht plattformunabhängiges Kernel- und Modul-Debugging auf Hochsprachen-Niveau. Dank der virtuellen Maschine braucht der Kernelhacker noch nicht einmal einen zweiten Rechner.

  • Kern-Technik

    Einen Treiber in den Kernel einzubinden ist leider wenig intuitiv. Deshalb gibt es hier ein Grundgerüst als Ausgangspunkt. Es zeigt, wie der Kernel dem Treiber Gerätenummern zuweist und der Gerätedateiverwalter Udev eigenständig die zugehörigen Gerätedateien anlegt.

  • In eigener Sache: Update des Bundles "Kern-Technik"

    Das Bundle aktualisiert das Themenpaket Kern-Technik um weitere fünf Folgen, darunter eine Sonderfolge zur 50. Kern-Technik und die Hitlist der Kern-Technik-Diplomanden. Mit im Bundle liegen Kernel-relevante Themenartikel zu Compilern, zu Multitouch sowie ein nützlicher Vergleich von Logfilebetrachtern.

comments powered by Disqus

Ausgabe 11/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Stellenmarkt

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.