PCs benötigen tatsächlich einen Gerätebaum.
Sie nennen es einfach etwas anderes.
Es ist nicht richtig zu sagen, dass Betriebssysteme für die Nachkommen von PC / AT-kompatiblen Geräten die Existenz von Dingen wie einem PCI-Bus voraussetzen. Sie nicht.
Sie untersuchen auch nicht. Seit Mitte der neunziger Jahre war es nicht mehr erforderlich, nach Hardware zu suchen, nur einige E / A- oder Speicheradressen zu durchsuchen, um festzustellen, ob sie funktionieren.
Sie zählen vielmehr einen Root-Bus auf .
Dies ist ein Bus, der nicht wie bei anderen aufzählbaren Bussen durch Kommunikation mit der Hardware des Buscontrollergeräts aufgezählt werden kann. Dies ist ein Bus, der nur als Konstrukt der Systemfirmware und des Betriebssystems existiert. Es wird durch Abfragen der System-Firmware aufgelistet, und was darauf vorhanden ist, wird vom Mainboard-Hersteller in die System-Firmware eingebrannt, um mit dem übereinzustimmen, was sich auf dem Mainboard befindet.
Das Konzept unterscheidet sich kaum von diesem und einem Gerätebaum. Genau wie ein Gerätebaum muss er so erstellt werden, dass er mit der tatsächlichen Karte übereinstimmt. Genau wie bei einem Gerätebaum handelt es sich um eine Liste von Geräteknoten, an die (unter anderem) Ressourceninformationen angehängt sind. Genau wie ein Gerätebaum befindet er sich außerhalb des Betriebssystems und ist keine Liste von Dingen, nach denen gesucht werden muss, um fest in den Code des Betriebssystems eingebunden zu sein.
Die Plug-and-Play-BIOS-Spezifikation sieht vor, dass die Firmware einem Betriebssystem einen einfachen Gerätebaum im Speicher bereitstellt, von dem einer (z. B.) ein PNP0A03
Knoten ist, der einen PCI-Bus bezeichnet und die E / A- und Speicherressourcen angibt, die er enthält zugewiesen ist und somit dort, wo es zu finden ist.
ACPI ersetzt dies, aber die Idee bleibt dieselbe. In ACPI gibt es eine Tabelle namens Differentiated System Description Table , ergänzt durch eine Secondary System Descriptor Table , die (mit Informationen aus einigen anderen ACPI-Tabellen) fast dasselbe bietet.
(Wenn Sie dies von Seiten der Firmware-Entwickler sehen möchten, sehen Sie sich Coreboot als Beispiel an. Es enthält eine große Anzahl von ACPI-Quellensprachendateien, von denen eine Auswahl zu einem Bytecode-Binärbild kompiliert wird, das in die Firmware integriert ist. Die Auswahl wird von einem Konfigurationstool gesteuert, das Sie zur Eingabe des gewünschten Mainboards auffordert.)
Unter FreeBSD wurden beispielsweise die Plug-and-Play-BIOS-Spezifikationsinformationen von einem pnpbios
Bustreiber im Kernel (der inzwischen entfernt wurde) aufgelistet, und (heutzutage) werden die ACPI-Informationen von einem Bustreiber aufgelistet acpi
. Unter Linux gibt es (noch) einen drivers/pnp/pnpbios
Bustreiber, der die Plug-and-Play-BIOS-Tabellen liest, und die ACPI-Tabellen werden durch Code gelesen, der über arch/arm64/kernel/
und verteilt ist arch/x86/kernel/
.
Der aufzählbare Root-Bus kann, kann sich aber im Allgemeinen nicht (bei einigen Eingriffen durch ACPI) mit den auf den Bussen aufzählbaren Dingen überschneiden, die Geräte auf dem Root-Bus sind. Während beispielsweise PNPxxxx
IDs für ATA-Busse vorhanden sind, listet die Systemfirmware keine PCI-zu-ATA-Bridge-Geräte auf dem Root-Bus auf, die diese verwenden. Solche Geräte werden gefunden, indem der PCI-Bus beim Auflisten des Root-Busses und dann die PCI-zu-ATA-Brücke beim Aufzählen des PCI-Busses gefunden werden.
Die einfache Tatsache ist, dass auf stark divergierenden Plattformen mit unterschiedlichen Namen für die Konzepte dasselbe Grundprinzip in Kraft ist. Es gibt eine integrierte Liste von Geräten, die mit den ansonsten nicht aufzählbaren Geräten im System übereinstimmen, und die Firmware oder der verwendete Bootloader bietet dem Betriebssystem einen Mechanismus zum Lesen dieser Liste und zum Konfigurieren der darauf befindlichen Geräte das Betriebssystem, um diese Geräte dann abwechselnd aufzulisten.
Weiterführende Literatur