Autor Thema: ACPI - Referenzimplementation  (Gelesen 6404 mal)

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« am: 31. January 2011, 16:57 »
Moin,

ACPI ist ja bekanntermaßen fies, deswegen nutzt es hier keiner.

Es gibt aber eine OS-unabhängige Referenzimplementation namens ACPICA, die man unter http://www.acpica.org/ finden kann; das Teil steht unter Dual-Lizenz (eine proprietäre und GNU GPL Version 2); ist also für Open-Source und für Closed-Source-Betriebssysteme geeignet.

Der OS-spezifische Teil besteht aus ca. 25-30 Funktionen, die das OS bereitstellen muss (z.B. "AcpiOsMapMemory" oder "AcpiOsAllocate"). Das OS muss drei Bedingungen erfüllen:
(a) man muss den OS-spezifischen Teil implementieren
(b) man muss im Startup-Code seines OS die ACPI-Initialisierung aufrufen
(c) das OS muss entweder in C geschrieben sein oder Schnittstellen zu C-Code aufbauen können

Wer also ACPI haben möchte, findet dort bestimmt eine Menge Hilfe.

Gruß,
Svenska
PS: Ja, der Link stand schon vorher im Wiki.

XanClic

  • Beiträge: 261
    • Profil anzeigen
    • github
Gespeichert
« Antwort #1 am: 31. January 2011, 18:55 »
deswegen nutzt es hier keiner.
Och, doch, aber nur ein bisschen Code zum Herunterfahren, den ich mir von osdev.org geklaut habe. :wink:

Und die andere Frage ist natürlich auch, was ACPI sonst so bringt (außer Tabellen für SMP, aber da gibt es auch die Floating Pointer Structure, die im Allgemeinen ausreichen dürfte)...

erik.vikinger

  • Beiträge: 1 277
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 31. January 2011, 20:54 »
Hallo,


da möchte ich mich der Meinung von XanClic anschließen: Wozu benötigt man das ACPI eigentlich?

Wenn ich die ACPI-Spezifikation richtig verstanden hab dann geht es vor allem um 2 Dinge: das Finden aller Komponenten (zumindest die die auf dem Main-Board drauf sind und damit auch vom BIOS-Programmierer berücksichtigt werden können) und das Power-Management welches vom OS kontrolliert werden soll (auch hier wieder die Einschränkung dass das vor allem die Komponenten trifft die auf dem Main-Board aufgelötet sind). ACPI ist also eine Ansammlung von Tabellen zur System-Analyse und etwas Code zum Ausführen der Power-Managementfunktionen. Gerade letzteres setzt aber voraus dass das OS damit auch etwas anfangen kann und das dürfte bei den meisten Hobby-OSen eher nicht der Fall sein (selbst unter den großen bzw. kommerziellen OSen ist richtiges Power-Management eher selten anzutreffen).
Das nächste ist das ACPI mMn obsolete ist weil z.B. das Finden der Hardware auch vom PCI-P&P gewährleistet wird und das Device-Power-Management kann ebenfalls über den PCI-Config-Space geregelt werden. ACPI ist damit eigentlich nur für Nicht-PCI-Geräte interessant also entweder irgendwelche PC-Altlasten oder Dinge wie z.B. das Netzteil. Aber gerade das Netzteil hat ja dank ATX auch wieder ein genormtes Interface so das eigentlich nur noch dessen proprietäre Anbindung an die SW dem ACPI bleibt und hier wäre es IMHO besser einfach einen Satz an Registern zu standardisieren über die u.a. das Netzteil und der Power-Taster erreichbar sind.
Wenn man die anderen Mechanismen der PC-Plattform konsequent nutzt bleibt IMHO nicht viel übrig um das sich ACPI überhaupt kümmern müsste und genau deswegen wird dieses Monster auch kaum von kleineren OSen implementiert.


Grüße
Erik
Reality is that which, when you stop believing in it, doesn't go away.

FlashBurn

  • Beiträge: 844
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 31. January 2011, 22:15 »
Wenn man wirklich den I/O-Apic nutzen möchte sind die IRQ Routing-Tables, die im ACPI Code verfasst snd  :? , schon nicht schlecht. Dann kommt noch hinzu, das es da irgendeinen Unterschied zw den MP Tabellen und den ACPI Tabellen gab (logische, physische CPUs) und auch das IRQ Routing war irgendwie unterschiedlich.

Also es wäre schon nicht schlecht, wenn man ACPI Code interpretieren könnte, aber bis ich mal soweit bin das ich das wirklich gebrauchen kann, wird es eventuell relativ einfach es auch zu implementieren.

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 01. February 2011, 23:58 »
Hallo,

also ich muss schon sagen... tolle Antworten hier... macht echt Spaß.

(a) War das ein netter Hinweis, dass es sowas gibt und keine Aufforderung, jetzt ACPI in jedes OS reinzustopfen. :roll:
(b) Ersetzt ACPI jeden älteren Stromsparstandard (insbesondere APM), was durchaus für Notebooks ein wichtiger Gedanke ist.
(c) Ist nicht alles PCI in dieser Welt. Aber ich mag nicht streiten.

Windows Vista unterstützt z.B. kein APM mehr. Das führt mit der Zeit dazu, dass die Qualität der nicht-ACPI-Dinge, die man nutzen könnte (z.B. MP-Tabellen) noch weiter sinken wird oder sie ganz verschwinden werden. Wenn die üblichen Betriebssysteme (jedes Betriebssystem mit nennenswerter Verbreitung unterstützt heutzutage ACPI) kein nicht-ACPI mehr nutzen können, wird halt nur noch ACPI implementiert.

Also es wäre schon nicht schlecht, wenn man ACPI Code interpretieren könnte, aber bis ich mal soweit bin das ich das wirklich gebrauchen kann, wird es eventuell relativ einfach es auch zu implementieren.
(d) Ist ein korrekter ACPI-Interpreter mit den ganzen Workarounds, die man braucht (und von denen manche laut ACPICA u.a. auf einer unvollständigen Microsoft-Implementation beruhten!) alles andere als trivial. Wenn ich mich recht entsinne, hat Linus das ACPI-System als einen der größten einzelnen Patches des Kernels überhaupt bezeichnet.

Angeblich benutzt Microsoft die ACPICA-Implementation als Basis für ihre eigene, Linux hat eine sehr eng verwandte und die BSDs nutzen sie wohl mehr oder weniger direkt. Es kann also nicht schaden, sich das mal anzuschauen.

Gruß,
Svenska

 

Einloggen