Übersicht ::
ASUS Mobile Computing ::
Linux ::
HOWTO: Reparieren der DSDT
moderiert von:
Moderatoren
HOWTO: Reparieren der DSDT |
||
|---|---|---|
| graviton | verfasst: 15.05.2004, 15:56 | |
ASUS fanatic
registriert: Feb. 2004
Beiträge: 661
Status: offline letzter Besuch: 06.05.08 |
Das Reparieren der Differentiated System Descriptor Table (DSDT) der ASUS M6N Serie- oder so klappts auch mit dem Akkufuellstand Warum sollte ich selbst reparieren? Weil die DSDT fuer unterschiedliche Biosversionen, Speicheraustattungen und CPU's unterschiedlich ist. Nimmt man also eine DSDT von einem Geraet das eine kleinere CPU eingebaut hat als man selbst so kann es passieren das das Speedsteppen verhindert das man seine CPU auf volle Geschwindigkeit bringen kann. Um Overclocker schonmal alle Hoffnung zu nehmen, umgekehrt gehts leider nicht, das verhindert die Hardware schon:) Die Infos hier gibts an verschiedenen Quellen im Netz nachzulesen, das ist hier also mehr eine Kurz-How-To-Summary: 1. Notebook mit unveraenderter DSDT booten. Als "root" anmelden und mittels "cat /proc/acpi/dsdt > dsdt" die aktuelle DSDT sichern. 2. Den Intel ASL Compiler/Disassembler runterladen und entpacken: http://developer.intel.com/technology/iapc/acpi/downloads/iasl-linux-20030918.tar.gz 3. Mittels "iasl -d dsdt" die zuvor gesicherte dsdt disassemblieren. 4a. Nun muss die disassemblierte dsdt.dsl per Hand repariert werden(oder unter 4b automatisch fuer die ungeduldigen): - Der erste Fehler der den Intel ASL Compiler verwirrt befindet sich in den Zeilen 1535,1536,1543: "IO" muss in diesen Zeilen durch "IO_" ersetzt werden. Vermutlich ein BUG im Compiler. - In den Zeilen 4936, 4945, 4954, 5432, 5443 muessen die If (SS#) {} jeweils mit Klammerung geloescht werden. Die Name () deklarationen muessen stehen bleiben. - In der Zeile 645 wurde ein EndDependentFn () vergessen. Den /*** */ Kommentar durch "EndDependentFn ()" ersetzen. - In den Zeilen 2699 und 2960 wurden jeweils am Ende der Methode "BST0" ein "Return (Local0)" vergessen. Einfach einfuegen. 4b. Um diesen Schritt zu beschleunigen hab ich ein diff bereit gestellt, einfach mittels patch -i dsdt.diff dsdt.dsl einspielen. 5. Das wars schon fast. Die geaenderte dsdt.dsl sichern und mittels "iasl -tc -oa dsdt.dsl" compilieren. Die entstandene dsdt.hex oder dsdt.aml wie gewohnt in den Kernel bzw. Initrd patchen. Mit dieser Methode koennen unter Verwendungen eines aktuellen Kernels (2.6.5) und des ecdt-Patches alle ACPI Fehler behoben werden. EDIT: Es soll besser sein diesen cst_support Patch einzuspielen als die Prozessor Block Length zu veraendern. Man hat zwar einen Fehler im Kernellog das die PBLK-length falsch ist, aber der C2 Modus soll laufen, wodurch man mehr Strom spart. Ich selbst hab keine Aenderung festgestellt :) Hab die Anleitung und Patches trotzdem upgedated. PS.: Mit etwas Glueck wird ab Kernelversion 2.6.9 die Geschichte mit dem hinzufuegen des vergessenen "Return (Local0)" ueberfluessig. Damit muesste es _mit etwas Gueck_ komplett ueberfluessig sein die dsdt zu patchen. Vermutlich wird man zwar noch die anderen Patches (ecdt, cst_support) einspielen muessen, aber die betreffen dann nur noch den Linux Kernel und nicht das ACPI-Bios EDIT@ 02.Sept04: Wir haben vermutlich ein Problem mit der DSDT gefunden, welche das gelegentliche Versagen der Lueftersteuerung erklaert. Ob der Bug jetzt ursaechlich innerhalb der Linux-Acpi Implementierung oder wahrscheinlich eher im Bios zu finden ist(da das Problem auch unter Windows besteht) bleibt erstmal offen. Die Ursache des Versagens der Lueftersteuerung ist ein Nebenlaeufigkeitsproblem, welches sich am einfachsten beheben laesst, in dem man saemtliche "NotSerialized" Anweisungen durch "Serialized" Anweisungen ersetzt. Es ist vielleicht nicht ganz sauber, und Nebeneffekte koennen natuerlich auftreten, aber ein Luefterversagen welches auftreten kann wenn man nicht patched kann evtl. schlimmere Folgen haben... EDIT@ 10.Sept04: Alternativ gibt es die Kerneloption "acpi_serialize", welche die gleiche Funktion hat, nur leider funktioniert sie erst ab Kernel >= 2.6.9 EDIT@ 19.Feb05: Das 213er Bios behebt den acpi_serialize Bug EITT@ 23.Mar05: Seit 2.6.11 kann man sich den ecdt patch sparen (gut konnte man vorher auch), einfach acpi_fake_ecdt als weiteren boot Parameter mit uebergeben. EDIT@ 31.Mar05: Juhu, seit Bios 214A/208A ist die Batterieanzeige gefixed editiert von: graviton, 31.03.2005, 13:12 Uhr :: Ey Amigos, hoert mal ein bischen zu, koennte wichtig sein! :: - ** M6800N ** 1.5GHz ** DVD/CD-RW ** 1 Gig Infineon ** Gentoo Linux ** |
|
|
|
|
|
| Svlad | verfasst: 15.05.2004, 18:12 | |
Senior Member
registriert: Jan. 2004
Beiträge: 154
Status: offline letzter Besuch: 04.02.06 |
Wunderbar. Das hat sehr geholfen. Könntest Du vielleicht noch sagen, welche BIOS Version Du hast und wie die Methoden heißen, bei denen das Return(Local0) vergessen wurde? Die finde ich in meiner DSDT Tabelle nämlich nicht. Vielleicht würde es auch helfen den Diff im Unified Format zu erstellen. PS: Habe jetzt nach dem Kompilieren gesehen, daß man die Stellen aus den Fehlermeldungen ableiten kann. editiert von: Svlad, 15.05.2004, 18:21 Uhr |
|
|
|
|
|
| graviton | verfasst: 15.05.2004, 20:20 | |
ASUS fanatic
registriert: Feb. 2004
Beiträge: 661
Status: offline letzter Besuch: 06.05.08 |
Ok, ist jetzt unified diff und Methodenname war BAT0. Bios Version ist 207, bei 206 waren es die selben Probleme. :: Ey Amigos, hoert mal ein bischen zu, koennte wichtig sein! :: - ** M6800N ** 1.5GHz ** DVD/CD-RW ** 1 Gig Infineon ** Gentoo Linux ** |
|
|
|
|
|
| Svlad | verfasst: 15.05.2004, 20:27 | |
Senior Member
registriert: Jan. 2004
Beiträge: 154
Status: offline letzter Besuch: 04.02.06 |
Hmmm... Die hießen bei mir anders. Vielleicht sollte ich wirklich mal ein aktuelles BIOS einspielen. Habe immer noch die originale Version drauf. |
|
|
|
|
|
| graviton | verfasst: 15.05.2004, 20:56 | |
ASUS fanatic
registriert: Feb. 2004
Beiträge: 661
Status: offline letzter Besuch: 06.05.08 |
ups BST0 meinte ich; wie kommt ich BAT :: Ey Amigos, hoert mal ein bischen zu, koennte wichtig sein! :: - ** M6800N ** 1.5GHz ** DVD/CD-RW ** 1 Gig Infineon ** Gentoo Linux ** |
|
|
|
|
|
| Svlad | verfasst: 15.05.2004, 21:21 | |
Senior Member
registriert: Jan. 2004
Beiträge: 154
Status: offline letzter Besuch: 04.02.06 |
Ahhh... Dann kann ich das Update ja doch noch was aufschieben. editiert von: Svlad, 15.05.2004, 21:21 Uhr |
|
|
|
|
|
| Svlad | verfasst: 16.05.2004, 20:13 | |
Senior Member
registriert: Jan. 2004
Beiträge: 154
Status: offline letzter Besuch: 04.02.06 |
Hi. Ich habe jetzt die DSDT Tabelle eingespielt, aber wenn ich mir bei eingelegtem Akku /proc/acpi/battery/BAT0/state ausgeben lasse, kommt nur: /proc/acpi/battery/BAT0/info zeigt: Jemand eine Idee was das sein könnte? |
|
|
|
|
|
| graviton | verfasst: 16.05.2004, 21:39 | |
ASUS fanatic
registriert: Feb. 2004
Beiträge: 661
Status: offline letzter Besuch: 06.05.08 |
2.6.5er kernel oder hoeher? Bei Kernelversion vor 2.6.5 hatte der ASL Parser im Kernel ein BUG; da musste man noch Alias Definitionen rausschmeissen: Alias (\_SB.PCI0.SBRG.EC0.DPRT, DPRT) und aehnliche mussten entfernt werden und dann jeweils ueberall wo DPRT in der DSL steht \_SB.PCI0.SBRG.EC0.DPRT eingetragen werden. Entsprechend fuer andere Alias Definitionen... Ansonsten einfach mal die ganzen ACPI Fehlermeldungen in dmesg durchgehen... :: Ey Amigos, hoert mal ein bischen zu, koennte wichtig sein! :: - ** M6800N ** 1.5GHz ** DVD/CD-RW ** 1 Gig Infineon ** Gentoo Linux ** |
|
|
|
|
|
| Svlad | verfasst: 17.05.2004, 07:47 | |
Senior Member
registriert: Jan. 2004
Beiträge: 154
Status: offline letzter Besuch: 04.02.06 |
Ich habe den 2.6.5er von SuSE drauf. Seltsam ist allerdings, daß der Kernel erst meldet er hätte keine Custom DSDT gefunden und nachdem alles initialisiert ist, meldet er hätte eine reingeladen. Vielleicht liegt da ja schon der Hund begraben. |
|
|
|
|
|
| upD8R | verfasst: 26.05.2004, 09:24 | |
Senior Member
registriert: Mär. 2004
Beiträge: 266
Status: offline letzter Besuch: 17.08.06 |
@graviton Nachdem ich jetzt auch beim Punkt ACPI/dsdt angekommen bin , habe ich doch noch mal ein paar Fragen: Woher weißt Du, was Du ändern musst? Benutze einen 2.6.6er Kernel und habe noch das 206A-Bios drauf. Wie bekomme ich die geänderte dsdt zurück ins System? Gruß, Mario |
|
|
|
|
|
| graviton | verfasst: 26.05.2004, 10:50 | |
ASUS fanatic
registriert: Feb. 2004
Beiträge: 661
Status: offline letzter Besuch: 06.05.08 |
das mit den aendern ergibt sich aus den Fehlermeldungen des intel-asl-compilers :) Ansonsten war es gluecklicherweise recht naheliegend was gefixt werden musste, anhand der acpi Fehlermeldungen die der Kernel ausgespuckt hat. Bei den unterschiedlichen Bios Versionen hat sich leider nicht viel getan, soll heissen die DSDT's enthielten jeweils immer die gleichen Bugs, wenn es nicht sogar immer die gleichen DSDT's waren. Ansonsten hatten Kernelversionen < 2.6.5 einen BUG gehabt, der die Asus DSDT betraf, da Du nen aktuellen 2.6.6er hast ist, betrifft Dich das aber nicht :) Die geaenderte DSDT kriegst Du entweder mittels [URL=http://gaugusch.at/kernel.shtml]initrd patch[/URL] oder einkompiliert durch aendern der drivers/acpi/osl.c :: Ey Amigos, hoert mal ein bischen zu, koennte wichtig sein! :: - ** M6800N ** 1.5GHz ** DVD/CD-RW ** 1 Gig Infineon ** Gentoo Linux ** |
|
|
|
|
|
| upD8R | verfasst: 26.05.2004, 11:14 | |
Senior Member
registriert: Mär. 2004
Beiträge: 266
Status: offline letzter Besuch: 17.08.06 |
Dank Dir, dann habe ich ja heute abend was zu tun Gruß, Mario |
|
|
|
|
|
| upD8R | verfasst: 27.05.2004, 06:46 | |
Senior Member
registriert: Mär. 2004
Beiträge: 266
Status: offline letzter Besuch: 17.08.06 |
@graviton Danke für Deine Tipps. Ich konnte die dsdt ändern, obwohl ich nicht so richtig wusste. was ich da eigentlich mache Nachdem alles fertig war, habe ich natürlich prompt ein neues BIOS (208A) raufgespielt und werde also heute nochmal patchen Eine Frage bleibt - obwohl z.B. Akkustand angezeigt wird, erhalte ich beim Booten immer noch folgende Fehlermeldung: Noch was: wie kann ich aktuelle CPU-Frequenz auslesen und was hat es mit den verschiedenen Profilen im KLaptop (perforamnce, powersave, userspace) auf sich? Wo kann ich deren Parameter sehen? Danke + Gruß, Mario |
|
|
|
|
|
| graviton | verfasst: 27.05.2004, 19:51 | |
ASUS fanatic
registriert: Feb. 2004
Beiträge: 661
Status: offline letzter Besuch: 06.05.08 |
-CPU Frequenz gibts mit cat /proc/cpuinfo -KLaptop kenn ich nicht, aber ich vermute das Performance=Vollen Takt, Powersave=Min. Takt, Userspace=Dynamisch je nach Last -ich vermute das die verbleibenden Fehler mit fehlenden ecdt patch zusammenhaengen: http://www.tzi.de/~adieling/asusm6n-acpi/ecdt-2.6.6.patch Der Patch soll irgendwelche Initialisierungen von irgendwelche embedded Controllern vorziehen oder so aehnlich, genau hab ich es auch nicht verstanden, aber er funktioniert also wird es schon passen :: Ey Amigos, hoert mal ein bischen zu, koennte wichtig sein! :: - ** M6800N ** 1.5GHz ** DVD/CD-RW ** 1 Gig Infineon ** Gentoo Linux ** |
|
|
|
|
|
| d-lirium | verfasst: 07.07.2004, 17:10 | |
gerade reingestolpert
registriert: Jul. 2004
Beiträge: 2
Status: offline letzter Besuch: 07.07.04 |
Hallo, Beim durchführen der oben gennanten Anleitung erhalte ich folgenden Output: Aspiration:/proc/acpi # /home/d-lirium/programs/iasl-linux-20030918/iasl -dc dsdt Intel ACPI Component Architecture ASL Optimizing Compiler / AML Disassembler version 20030918 [Sep 18 2003] Copyright (C) 2000 - 2003 Intel Corporation Supports ACPI Specification Revision 2.0b Loading Acpi table from file dsdt Could not install table, AE_TABLE_NOT_SUPPORTED Kann mir jemand wieterhelfen? |
|
|
|
|
|
Zur Teilnahme an der Diskussion bitte anmelden.
Powered by pnForum Version 2.6

Mitglieder: 4915
Gäste online: 0
Mitglieder online: 0

