Ich habe gerade gelesen, wie Linux mit Hardwaretreibern umgeht. Anscheinend sind die meisten Hardwaretreiber im Linux-Kernel vorkompiliert. Ich habe einige Fragen dazu ...
Wenn der Linux-Kernel Hardwaretreiber für fast jedes Hardwaregerät enthält und ein Laptop, der unter Linux läuft, nur eine bestimmte Anzahl von Hardwaregeräten hat, was ist dann mit all den redundanten Hardwaretreibern, die der Linux-Kernel hat? Ist es nicht eine Verschwendung von Ressourcen, all diese Treiber im Kernel zu belassen und im System am Laufen zu halten, auch wenn wir sie nicht verwenden?
drivers
kernel
power-management
hardware
Uday Kumar
quelle
quelle
Antworten:
Zuerst etwas Geschichte. In den früheren Tagen von Linux wurden Gerätetreiber tatsächlich direkt in den Kernel kompiliert. Tatsächlich ist es immer noch möglich, Treiber direkt zu kompilieren, und in vielen Kerneln sind auf diese Weise möglicherweise noch einige sehr häufige Treiber enthalten. Die Art und Weise, wie es funktionierte, war, dass der mit den frühen Distributionen wie SLS oder Slackware gelieferte generische Kernel praktisch jeden Treiber, den der unterstützte Kernel unterstützte, direkt darin kompilierte, so dass er auf einer möglichst großen Vielfalt von Hardware funktionieren würde. Selbst dann war es nicht möglich, sie alle einzufügen, da einige von ihnen nicht miteinander kompatibel sind. Nachdem Sie Ihr System installiert haben, würden Sie Ihren eigenen Kernel erstellen und die Konfiguration sorgfältig durchgehen, um sicherzustellen, dass Sie die richtigen Treiber für alles enthalten, was Ihr Computer hatte. Manchmal musste man Header-Dateien im Treiber manuell bearbeiten, um die Unterstützung für Oddball-Hardware einzuschließen - eine Ethernet-Karte, die einen bestimmten Chipsatz verwendete, verwendete die Treiber des Chipsatzes, aber manchmal gab es komische Arten, wie sie implementiert wurden. Dann würden Sie kompilieren, installieren und hoffentlich nach einem Neustart einen benutzerdefinierten Kernel nur für Ihren Computer erstellen lassen. Schlank und optimiert. In der Realität haben Sie diesen Vorgang im Allgemeinen mehrmals wiederholt, einschließlich fehlender Elemente, der Unterstützung für ein vergessenes Dateisystem oder einer Änderung der Einstellungen. Spülen und wiederholen. und hoffentlich hatten Sie nach einem Neustart einen benutzerdefinierten Kernel nur für Ihren Computer erstellt. Schlank und optimiert. In der Realität haben Sie diesen Vorgang im Allgemeinen mehrmals wiederholt, einschließlich fehlender Elemente, der Unterstützung für ein vergessenes Dateisystem oder einer Änderung der Einstellungen. Spülen und wiederholen. und hoffentlich hatten Sie nach einem Neustart einen benutzerdefinierten Kernel nur für Ihren Computer erstellt. Schlank und optimiert. In der Realität haben Sie diesen Vorgang im Allgemeinen mehrmals wiederholt, einschließlich fehlender Elemente, der Unterstützung für ein vergessenes Dateisystem oder einer Änderung der Einstellungen. Spülen und wiederholen.
Diese Zeiten sind zum Glück lange vorbei. Der Kernel unterstützt seit sehr langer Zeit ladbare Module. Hierbei handelt es sich um Kerneltreiber, die so kompiliert wurden, dass sie zu einer Art gemeinsam genutzter Bibliothek werden, die bei Bedarf geladen oder entladen werden kann. Nun, wie ein Kernel bootet, haben Sie die Kerneldatei selbst und ein kleines komprimiertes Dateisystem (siehe initramfs auf Wikipedia), das alle Kernelmodule enthält, die der Kernel unterstützt. Der Kernel lädt, findet sein ursprüngliches Dateisystem und kann dann mit dem Laden aller benötigten Treiber beginnen.
Das bisschen Geschichte überspringt eine Menge Arbeit und schwitzt auf dem Weg. Dazwischen die Verwendung aller kompilierten Treiber in einem riesigen monolithischen Kernel und ein vollautomatisches Treiberladesystem, das wir heute haben, waren alle Schritte auf dem Weg, auf dem wir Module hatten, die explizit geladen werden mussten, das halbautomatische Laden für einige usw usw.
Da moderne Kernel die große Mehrheit der benötigten Treiber nach Bedarf laden, belegen im Kernel einer modernen Linux-Distribution nur wenige redundante Hardwaretreiber Ressourcen.
quelle