doc:guides:acpi

ACPI: Modificar el DSDT de sistema

This article is obsoleted, deprecated and/or outdated, is kept here for historical reason
* Els fonts del Kernel 2.4.x
* El patch ACPI més nou per al kernel
* L'ensamblador d'Intel per a ASL [[http://www.intel.com/technology/IAPC/acpi/downloads.htm|iasl]]
* Estar ja corrent un kernel amb suport ACPI

Per poder extraure el DSDT del sistema necessitem estar usant un kernel amb suport ACPI. Això vol dir que cal fer una primera compilació seleccionant suport per ACPI encara que el DSDT no funcioni del tot.

Primer hem d'obtenir el DSDT que ja porta el sistema, per poder-ho fer necessitem estar usant un kernel amb suport ACPI encara que el DSDT no funcioni és necessari per obtenir-lo Podem fer-ho de dos maneres:

* Llegint-lo de /proc/acpi/dsdt
* Volcant-lo amb [[http://people.freebsd.org/~takawata/pacpidump.tar.gz|acpidump]]

Aquest fitxer és un binari (codi màquina del ACPI), per obtenir un codi llegible i poder arreglar el que Microsoft ha destrossat necessitem desensamblar-lo amb ajuda del iasl, així per exemple farem:

# cat /proc/acpi/dsdt > dsdt-original
# iasl -d dsdt-original

Això genera un fitxer dsdt.dsl molt semblant a un codi en C. Dona-hi un cop d'ull si vols.

Ara que tenim el codi font DSL, és molt simple, només l'hem de compilar de nou amb el iasl i corregir els errors (no detallaré com, mira aquí i aquí):

$ iasl -tc dsdt.dsl
[...]
ASL Input: dsdt.dsl - xxxx lines, xxxxx bytes, xxxx keywords
Compilation complete. X Errors, X Warnings, 0 Remarks ...

Com pots veure no compila, dóna errors i/o warnings que cal arreglar. Un cop arreglats i la compilació finalitzi sense problemes, tindrem dos fitxers: dsdt.hex i dsdt.aml.

Primer necessitem que el kernel llegeixi la nostra DSDT i carregui aquesta enlloc de la del sistema. Per fer-ho necessitem aplicar aquest patch:

  --- linux-2.4/drivers/acpi/osl.c        2003/01/14 16:22:32     1.1
  +++ linux-2.4/drivers/acpi/osl.c        2003/01/14 16:25:43
  @@ -25,6 +25,7 @@
    *
    */
   +#include <acpi/dsdt_table.h>
   #include <linux/config.h>
   #include <linux/kernel.h>
   #include <linux/slab.h>
  @@ -208,7 +209,8 @@
          if (!existing_table || !new_table)
                  return AE_BAD_PARAMETER;

  -       *new_table = NULL;
  +       *new_table = (strncmp(existing_table->signature, DSDT_SIG, 4)) ? NULL \
  +                       : (struct acpi_table_header *) AmlCode;
          return AE_OK;
   }

Com pots veure el patch fa un 'include' d'un fitxer anomenat dsdt_table.h, aquest fitxer serà la nostra nova DSDT, copia-la:

# cp dsdt.hex /usr/src/linux-2.4.26/include/acpi/dsdt_table.h

Finalment només queda compilar el kernel com ho faries normalment i reiniciar. En els missatge de boot (o si no també apareix en el dmesg), veuràs que t'avisa que sobreescriure el DSDT de sistema.

  • doc/guides/acpi.txt
  • Last modified: 2021/06/10 21:44
  • by 127.0.0.1