Kernel-Log – Was 3.3 bringt (4): Treiber

Der Nouveau-Treiber spricht ab Linux 3.3 neuere GeForce-Chips an; Intels GPU-Stromspartechnik RC6 soll jetzt endlich zuverlässig arbeiten. Der Poulsbo-Grafiktreiber und einige Hyper-V-Treiber verlassen den Staging-Zweig, in den neue Treiber für Android einzogen.

In Pocket speichern vorlesen Druckansicht 14 Kommentare lesen
Lesezeit: 35 Min.
Von
  • Thorsten Leemhuis
Inhaltsverzeichnis

Der Intel-Grafiktreiber erhielt mit Linux 3.3 eine Anpassung, durch die der Kernel jetzt den tiefsten Schlafzustand der Intel-GPU-Stromspartechnik RC6 meidet. Dadurch soll diese Technik nun zuverlässig mit den Grafikkernen arbeiten, die in Intels Prozessoren der derzeit aktuellen Generation Sandy-Bridge stecken. RC6 spart laut Messungen der c't typischerweise 3 bis 5 Watt im Leerlauf; Anwender berichten teilweise von noch größeren Spareffekten. Bei sparsamen Notebooks kann solch eine Reduktion die Leerlauf-Leistungsaufnahme um 30 bis 40 Prozent senken und so die Akku-Laufzeit spürbar verlängern.

Doch auch bei Kernel 3.3 bleibt RC6 bei Sandy-Bridge-CPUs standardmäßig ausgeschaltet und muss über den Kernel-Parameter i915.i915_enable_rc6=1 manuell aktiviert werden; die Intel-Entwickler erwägen, die Technik bei Linux 3.4 standardmäßig einzuschalten. Indes haben die Kernel-Hacker die erst seit Linux 3.1 automatisch verwendete, aber längst nicht so effiziente Stromspartechnik Frame Buffer Compression (FBC) bei Linux 3.3 wieder standardmäßig lahmgelegt, da Probleme aufgetaucht sind.

Die Nouveau-DRM/KMS-Treiber für Grafikchips von Nvidia unterstützen ab Kernel 3.3 erstmals die Audio-Ausgabe via HDMI bei Grafikchips ab dem NVA3, der auch als GT215 bekannt ist (1, 2, 3, 4); solche Grafikkerne sitzen beispielsweise auf den GeForce-Modellen GT 240, 320 und 335M, den GTS-Modellen 250M, 260M, 350M und 360M sowie deren Nachfolgern. Der Nouveau-Treiber von Linux 3.3 steuert erstmals die GPU mit dem Codenamen NVD9 an, die unter anderem die GeForce-GT-Modelle 520, 520M, 520MX sowie die GeForce 410M verwenden. Zudem gab es eine Reihe von Änderungen, welche die nach wie vor rudimentäre Unterstützung für Stromspar- und Lüfter-Management im Nouveau-Treiber ein klein wenig verbessern. Der Nouveau-Treiber erhielt zudem einige Funktionen zur Unterstützung von Nvidias Grafikchip-Zuschalttechnik Optimus.

Mehr Infos

Entwicklungsstand

Bei der Freigabe der sechsten Vorabversion von Linux 3.3 erklärte Torvalds, dass diese möglicherweise die letzte Vorabversion sein könnte. Wahrscheinlich dürfte Linux 3.3 daher zum Anfang der nächsten Woche oder dem Beginn der Folgewoche erscheinen, sofern er und seine Mitstreiter nicht noch größere Probleme finden.

Der Radeon-DRM/KMS-Treiber für Grafikchips von AMD unterstützt nun HDMI-Audio-Ausgabe bei den Chips der Evergreen-Generation, die häufig, aber nicht immer auf GPUs der Radeon-HD-5000er-Serie sitzen. Die Informationen zur Ansteuerung der HDMI-Audio-Hardware wurden mit Hilfe von Reverse Engineering ermittelt; wie gut der so entstandene Code arbeitet, muss der Feldtest zeigen. Der neue "GPU virtual memory support" legt einige Grundlagen für einen Open-Source-Treiber für die "Southern Islands"-Grafikchips, die auf einigen Grafikkarten der kürzlich eingeführten Radeon-HD-7000-Serie im Einsatz sind; dieser Code soll langfristig zudem die CPU entlasten, wenn Command Streams an die GPU gesendet werden. Die mit 3.3 eingebauten Multiple Fence Queues für den Radeon-DRM/KMS-Treiber rüsten einige Funktionen nach, die unter anderem zur Nutzung der UVD genannten Video-Einheiten nötig ist.

Der neue "DMA aware ttm page pool code" vereinfacht das Virtual Memory Management im Radeon-DRM/KMS-Treiber und ermöglicht den Einsatz des von Radeon und Nouveau verwendeten GPU-Speicherverwaltungstechnik TTM (Translation Table maps) unter Xen. Einige weitere Änderungen an den Grafiktreibern finden sich bei den kleinen Perlen am Ende des Artikels und im Haupt-Git-Pull-Request von DRM-Subsystem-Betreuer Dave Airlie.

Der von Intel-Mitarbeiter und Kernel-Urgestein Alan Cox entwickelte DRM/KMS-Grafiktreiber für die Intels-Grafikkerne GMA500, GMA600 und GMA3600 zog in das DRM-Subsystem ein (u. a. 1, 2, 3, 4, 5); der Treiber war zuvor unter anderem Namen einige Monate im Staging-Bereich für verbesserungsbedürftigen Code. Auch der gereifte Treiber unterstützt allerdings nur die wichtigsten Funktionen der Grafikchips. Der GMA500 in Intels Embedded-Chip US15W ("Poulsbo") wurde auch in einigen Netbooks verbaut und hat dort einigen Linux-Anwendern in den letzten Jahren reichlich Kopfschmerzen bereitet: Die Treiber-Situation war lange recht verfahren, weil Intel die proprietären Treiber nicht direkt zum Download anbot und die im Umlauf befindlichen Treiber mit aktuellen Linux-Distributionen häufig nicht oder nicht gut funktionierten.

Die von Microsoft selbst vorangetriebenen Netzwerk-, HID- und Maus-Treiber für die eigene Virtualisierungsschnittstelle Hyper-V sind nach mehreren Jahren im Staging-Bereich nun so weit gereift, dass sie in die zuständigen Subsysteme umziehen konnten. Der Storage-Treiber hat den Sprung knapp verpasst; er soll den Staging-Bereich mit dem Kernel 3.4 verlassen, womit dann auch der letzte Hyper-V-Treiber das Staging-Siegel ablegt.

In den Staging-Bereich eingezogen sind wie erwartet einige Android-spezifische Treiber – darunter auch einige, die vor Jahren schon mal im Staging-Bereich waren, aber wieder entfernt wurden, weil sich niemand um sie gekümmert hatte (u. a. 1, 2, 3, 4, 5). Durch diese Änderungen soll der Standard-Kernel jetzt alles Nötige zum Booten des Android-Userlands mitbringen; es fehlt allerdings noch der Wakelock-Code oder ein Äquivalent, um ordentliche Akku-Laufzeiten zu erreichen. Einige Hintergründe zum Stand der Integration der Android-spezifischen Änderungen hat John Stultz kürzlich in einem LWN.net-Artikel zusammengefasst, in dem er von einem Treffen der Android Mainlining Interest Group berichtet.

Neu im Staging-Bereich ist ein rudimentärer DRM/KMS-Treiber für die OMAP-Platform von Texas Instruments. Entfernt haben die Kernel-Entwickler unter anderem den Staging-Code des Dateisystems pohmelfs, da dessen Erfinder an einem Nachfolger arbeitet, den er neu entwickelt hat (1, 2).

Über den Verwalter der DRM-Subsystems stieß ein "DMA Buffer Sharing Mechanism" (dma_buf) genanntes Framework zum Kernel, über das sich mehrere Treiber einen DMA Buffer teilen können (u. a. 1, Dokumentation). Diese bislang noch von keinen Treiber genutzte Infrastruktur ist für Embedded-Systeme interessant, da der Kernel damit beispielsweise die von einer Kamera erfassten Bilddaten sowohl an einen Video-Encoder als auch an die Grafikhardware zur Darstellung weiterleiten kann, ohne die Bilddaten im Arbeitsspeicher vervielfältigen zu müssen.

In Systemen mit Hybridgrafik könnte ein dedizierter Grafikchip mittels dma_buf die von ihm berechneten Bilder ohne viel Aufwand über die Chipsatz- oder Prozessor-Grafik ausgeben – das ist etwa zur Unterstützung von Nvidias Technik Optimus interessant, die sich in nicht wenigen modernen Notebooks findet. Es wird allerdings noch diskutiert, ob auch proprietäre Treiber wie jener von Nvidia den DMA-Buffer-Sharing-Mechanismus verwenden dürfen; Rob Clark, einer der Hauptentwickler des Codes, hat sich einen Monat nach Beginn der Diskussion dafür ausgesprochen, es zu erlauben.

Einige Hintergründe zur DMA-Buf-Infrastruktur finden sich in einem LWN.net-Artikel und zwei Videos: Das erste stammt von einem Vortrag auf der Embedded Linux Conference (ELC), in dem Rob Clark das Framework beschrieben hat; die zweite Aufzeichnung zeigt einen Fosdem-Vortrag, in dem Daniel Vetter die Technik erläutert.

  • Die im Rahmen des Alsa-Projekts entwickelten Audio-Treiber des Kernels können die zur Ausgabe an die Hardware gesendeten Daten jetzt komprimiert übertragen (u. a. 1, Dokumentation). Der Treiber für HDA-Codecs von Cirrus spricht nun den Cirrus Logic 4213 an. Zu den weiteren Änderungen zählen eine Fortsetzung der Umbauten, damit die Treiber seltener auf im Kernel hinterlegte Sonderbehandlungen zurückgreifen müssen, um Realtek-Audio-Chips korrekt zu konfigurieren.
  • Neu in Linux 3.3 ist Code für den Tuner der Terratec H7; die Aufnahme eines Treiber für diese USB-Box, die digitales Antennen- und Kabelfernsehen ermöglicht und ein CI-Modul enthält, ist noch in Vorbereitung. Es gab zudem eine Reihe von Umbauarbeiten und Erweiterungen rund um die Programmierschnittstellen (APIs) der Frontend- und Tuner-Treiber; Details finden sich bei den kleinen Perlen auf der nächsten Seite und in einer Mail von Media-Subsystem-Betreuer Mauro Carvalho Chehab.
  • Die ATA-Treiber erhielten einige Verbesserungen zum Power-Management zur Laufzeit (1, 2, 3, 4).
  • Der Treiber für ALPS-Touchpads spricht nun Touchpads an, die Version 3 und 4 eines ALPS-Protokolls verwenden. Bisher nutzte der Kernel deren PS/2-Kompatibiltiätsmodus, der eine Doppelklick-Funktion bereitstellten; jetzt muss man diese Funktion unter Umständen explizit aktivieren.
  • Der Hardware-Monitoring-Treiber it87 unterstützt nun den auf einigen Mainstream-Mainboards eingesetzten Baustein IT8728F.
  • Bei der Programmierung von Kernel-Treibern gibt es nun keine Sonderbehandlung mehr für "System Devices" (sysdev) (1, 2); Treiber für Plattform-spezifische Geräte müssen in Zukunft mit den regulären Schnittstellen und Bus-Funktionen vorlieb nehmen.
  • Durch den neuen Charger Manager (Dokumentation) lernt der Kernel einige Funktionen zum Laden von Batterien auf Geräten, wo die Software den Ladevorgang überwachen und regeln muss.
Mehr Infos

Die "Was Linux 3.3 bringt"-Serie

Das Kernel-Log kann bereits jetzt einen Überblick über die wichtigsten Neuerungen der Mitte März erwarteten Linux-Version 3.3 geben, da alle größeren Neuerungen bereits in den ersten zwei Entwicklungswochen integriert wurden; Linux 3.3 befindet sich daher jetzt in der Stabilisierungsphase, in der die Kernel-Hacker normalerweise keine größeren Änderungen mehr vornehmen.

Über einige der Neuerungen von Linux 3.3 hat das Kernel-Log bereits berichtet:

Der nebenstehende Text schließt die "Was 3.3 bringt"-Serie ab.

Die folgenden Links führen zu einigen kleineren, aber keineswegs unbedeutenden Änderungen:

Audio

Graphics

I2C, Hwmon, Watchdog

HID

Media

MFD, MMC, MTD

Staging

USB

Various

Ein "C" im Bereich "[  ]" kennzeichnet Commits mit Änderungen an Kconfig-Dateien, welche die Konfigurationsoptionen samt der zugehörigen Hilfetexte enthalten. Mit "D" ausgezeichneten Patches verändern die dem Kernel beiliegende Dokumentation; Commits mit "N" legen neue Dateien an. Die Zahl vermittelt einen groben Eindruck zur Größe des Patches: Eine "1" kennzeichnet Patches, die inklusive Kommentar zwischen 10 und 20 KByte groß sind; Patches mit einer "9" sind 90 KByte oder größer. Änderungen ohne Zahl sind kleiner als 10 KByte.

Das Gros der Änderungen für eine neue Kernel-Version pflegen die Kernel-Entwickler in dem Merge Window am Anfang des Entwicklungszyklus ein; gelegentlich nehmen die Kernel-Entwickler in der darauf folgenden Stabilisierungsphase aber noch einige kleinere, zumeist nicht ganz so wichtige Änderungen der Kategorie "Die kleinen Perlen" in den Linux-Kernel auf – teilweise, nachdem das Kernel-Log über die entsprechenden Subsysteme des Kernels bereits berichtet hat. Auch diesmal gab es einige solche Nachzügler, die für den einen oder anderen Anwender relevant sein könnten:

Weitere Hintergründe und Informationen rund um Entwicklungen im Linux-Kernel und dessen Umfeld finden sich in den vorangegangenen Kernel-Logs auf heise open. Neue Ausgaben des Kernel-Logs werden auf den Identi.ca- und Twitter-Konten "@kernellog" erwähnt; die englischen, bei den Kollegen von "The H" erscheinenden Übersetzungen auf den Identi.ca- und Twitter-Konten "@kernellog2". Gelegentlich zwitschert der Autor des Kernel-Logs unabhängig davon über einige Kernel-Log-Themen bei Identi.ca und Twitter als "@kernellogauthor". (thl) (thl)