Kernel Mode Setting vs. Framebuffer?

24

Mit KMS werden die Grafiktreiber in den Kernel verschoben. Da sich der Framebuffer bereits im Kernel befindet, würde ich nicht erwarten, dass dies den Framebuffer-Betrieb beeinträchtigt. Ich habe jedoch gelesen, dass KMS die fb ersetzt, die fb erweitert, die fb benötigt und die fb-Unterstützung entfernt werden muss. Was zum Teufel? Die Antwort, nach der ich suche, ist eine Erklärung der Beziehung zwischen KMS und dem Framebuffer.

Ich habe Uvesafb verwendet, um native Auflösung am tty zu erhalten. Ich möchte hier verstehen, wie dies auf einem System mit KMS funktioniert. Es würde auch helfen, Dinge wie zu behandeln. Scrollen Sie mit KMS schneller? Funktionieren Dienstprogramme wie fbterm und fbida gleich? Ist die Stabilität besser?

user5184
quelle

Antworten:

6

Zunächst gibt es grundsätzlich zwei Arten von klassischen Framebuffer-Treibern:

  • Generische Hardware- und Firmware-Treiber (z. B. vga, vesafb / uvesafb, efifb)
  • Hardwarespezifische Treiber (zB rivafb, atyfb)

Die klassischen Framebuffer-Treiber verfügten alle über grundlegende Unterstützung für Modi, zeigten jedoch kaum Unterstützung für Hardwarebeschleunigung.

Beim klassischen X-Design war dies kein wirkliches Problem: Um eine 2D-Beschleunigung zu erhalten, wurde der X-Server als Root ausgeführt und konnte direkt auf die Hardware zugreifen. Grundsätzlich wurde der Framebuffer-Treiber komplett umgangen. Für 3D (und 2D-Unterstützung auf neueren Karten) würde es auch einen Kernel-DRM-Treiber verwenden, der den Zugriff und den verwalteten Videospeicher vermittelt.

In diesem Setup wurden zwei Modi festgelegt: sowohl im Kernel-Framebuffer-Treiber als auch im Userspace-X-Server. Diese Vervielfältigung von Code (und gelegentliche Kämpfe zwischen Treibern, z. B. auf VT-Switch) war nicht ideal.

Darüber hinaus gab es im Kernel zwei separate Treiber für dieselbe Hardware: den Framebuffer-Treiber und den DRM-Treiber. In einigen Fällen (z. B. vor km) können Sie das eine oder andere laden, jedoch nicht beide gleichzeitig.

KMS war die Lösung für diese Probleme. Es:

  • Führt den hardwarespezifischen Framebuffer-Treiber und den DRM-Treiber des Kernels zu einem einzigen Treiber zusammen.
  • Bietet eine Schnittstelle, über die der X-Server die Einstellung des Modus steuern kann, sodass der X-Server nicht direkt auf die Hardware zugreifen muss. (In der Tat benötigt der X-Server mit KMS keine Root-Berechtigungen mehr.)

Einige interessante Hinweise: Die Migration auf das heutige KMS begann tatsächlich um 2004; Siehe Jon Smirls E-Mail zur Konsolenarchitektur .

Um Ihre spezifischeren Fragen zu beantworten:

  • Die Geschwindigkeit wird im Allgemeinen nicht schlechter sein als einer der nicht beschleunigten allgemeinen Treiber (z. B. VGA, vesafb), aber die KMS-Framebuffer-Textkonsole wurde eher für die Bequemlichkeit und den Notfall als für die Geschwindigkeit entwickelt, und die Konsole ist bei einigen Treibern nicht vollständig beschleunigt. Umbrochene lange Zeilen sind zum Beispiel auf Intel-Karten ziemlich schlecht.
  • Anwendungen, die für die Verwendung der alten Framebuffer-Schnittstellen entwickelt wurden, funktionieren weiterhin auf einem KMS-Framebuffer.
Kepstin
quelle
3

KMS legt die Anzeigeauflösung und -tiefe im Kernelbereich und nicht im Benutzerbereich fest. Also ja, es ersetzt es. Es aktiviert die native Auflösung im Framebuffer.

Kernel Mode Setting

wojox
quelle
4
Wiki-Artikel über KMS sind leicht zu finden, aber die Erklärungen sind schrecklich. Wie kann KMS die fb ersetzen und gleichzeitig aktivieren? Die fb unterstützt bereits native Auflösung, was ist also anders? Arbeiten fb utilities mit KMS zusammen?
user5184
Ich denke nicht, dass Framebuffer native Auflösung unterstützt, besonders wenn der Monitor Breitbild ist. Die native Auflösung meines LCD-Monitors beträgt beispielsweise 1680 x 1050, der Framebuffer erkennt jedoch nur eine Auflösung von
1280 x