domenica 17 giugno 2007

Portatile Hp e problemi con la DSDT

Poco dopo natale ho deciso di cambiare il mio vetusto notebook con un modello che non risalisse ad un era in cui il DVD era considerato un optional di lusso.
Ho quindi dato un occhiata a cosa offriva il mercato e dopo un attenta analisi ho deciso che l'HP Pavilion DV6232EU faceva al caso mio.
Sia chiaro la scelta e' stata in larga misura fatta perché era uno dei pochi modelli che mi potevo permettere. A discapito del prezzo non vertiginoso pero il portatile si e' rivelato un buon acquisto e la scheda nvidia lo ha reso un buon candidato per l'utilizzo dei vari composite manager senza impazzirci troppo.
Il dramma e' arrivato con la release di Feisty. Dopo il tentativo di aggiornamento da edgy alla 7.04 fallito all'avvio dei nuovi kernel mi compariva un odiatissimo bios bug. la cosa non sembrava creare ulteriori problemi, ma considerando che dovevo cmq rifare le partizioni e ripulire un sistema ormai sovraccarico ho optato per una reinstallazione ex novo.
Visto che ormai avevo le mani in pasta (e visto che il bios bug) pareva non volersene andare ho
cercato un po e ho scoperto che esisteva un aggiornamento del bios proposto da HP.
Sventuratamente ho avuto la malaugarata idea di aggiornare il Bios.
Dopo l'aggiornamento non c'e' stato più verso di far funzionare correttamente la gestione dell'energia del notebook in ambiente linux con conseguente impossibilita di sfruttare la sospensione del computer e una certa instabilità nelle fasi di avvio e chiusura del sistema.
A quanto pare il tutto è dovuto alla discutibile scelta di HP di compilare la DSDT con un compilatore windows. Tutto perduto?
In teoria no. Il sistema e comunque utilizzabile e cercando un po' ho scoperto che in effetti è possibile estrarre da DSDT originale, modificarla , ricompilarla e inserirla nell'ininitrd image che viene avviata col kernell in uso.
Agendo in questo modo si forza il sistema a ignorare la DSDT originale e caricare invece quella che si è provveduto a modificare.
Procediamo quindi con ordine per prima cosa e' necessario scaricare il compilatore ASL di intell reperibile a questo indirizzo.
una volta installato il compilatore recuperiamo la DSDT attualmente in uso con

# cat /proc/acpi/dsdt > dsdt.dat

cio genererà un file di nome dsdt.dat che dovra essere decompilato con il compilatore ASL appena installato con il comando
iasl -d dsdt.dat
fatto questo avremo un file di tipo dsdt.dsl questo file contiene il codice relativo alla DSD table e finalmente è possibile capire cosa non va. Il metodo piu rapido e' ricompilare il file dsdt.dsl appena ottenuto e vedere gli errori e i warnings che vengono generati dalla compilazione. ad esempio nel mio caso il risultato e' questo:

asmodai@Kate:~$ iasl dsdt.dsl

Intel ACPI Component Architecture
ASL Optimizing Compiler version 20060912 [Dec 6 2006]
Copyright (C) 2000 - 2006 Intel Corporation
Supports ACPI Specification Revision 3.0a

dsdt.dsl 83: Method (\_WAK, 1, NotSerialized)
Warning 1079 - ^ Reserved method must return a value (_WAK)

dsdt.dsl 3530: Method (_Q16, 0, NotSerialized)
Warning 1086 - ^ Not all control paths return a value (_Q16)

ASL Input: dsdt.dsl - 7920 lines, 278552 bytes, 3970 keywords
AML Output: dsdt.aml - 32828 bytes 779 named objects 3191 executable opcodes

Compilation complete. 0 Errors, 2 Warnings, 0 Remarks, 1146 Optimizations

2 warnings alla fine pare i problemi non siano molti. Una volta individuati i problemi non resta che risolverli. Ok più facile dirlo che farlo, ma google in questo può risultare molto utile, recuperati i numeri relativi all'errore, nella maggior parte dei casi esiste online un modo per aggirare il problema.Se si e' particolarmente fortunati a questo indirizzo si può trovare una versione del DSDT gia corretta da usare sulla propria macchina. Ok ora che il codice è stato ripulito va ricompilato il tutto con il comando già visto

iasl -tc dsdt.dsl

Se non ci sono problemi si ottengono due file dsdt.hex e DSDT.aml.
Se il vostro kernel supporta l'initrd (quasi tutti i kernel piu recenti lo supportano altrimenti e' possibile recuperare una patch qui)è sufficiente passare al kernell tramite initrd nella fase di boot il nuovo DSDT usando il file DSDT.aml io per farlo ho usato questo simpatico script.
Il tutto sulla mia macchina ha avuto successo ma sventuratamente non ha risolto i problemi che l'affliggevano e il centro assistenza HP si rifiuta categoricamente di fornire assistenza per qualunque cosa non sia Windows.
Questo mi ha fatto imparare 2 cose: come ricompilare e ripulire un DSDT e che si deve SEMPRE stare molto attenti a che computer si compra e soprattuto al fatto che il produttore non abbia un servizio assistenza cosi inutile e insulso.

Nessun commento: