SDB:Debug della sospensione ACPI


Questo articolo si occupa del debug "di massima" ("hardcore"-debugging) della sospensione tramite ACPI (sospensione su disco e RAM).

Debug della sospensione tramite ACPI

A partire da SUSE 9.3 la sospensione su disco dovrebbe funzionare sulla maggior parte delle macchine senza grossi problemi. Cause note di problemi sono i dischi rigidi SATA e SCSI, nonché i driver per X proprietari, in particolare i driver fglrx di ATI.

Le unità rigide SATA dovrebbero funzionare bene a partire dalla 10.2.

I consigli citati sono validi in generale per la sospensione su disco, benché si spera che non siano necessari in quel caso :-)

La sospensione su RAM è un po' più complessa da approntare. Nonostante funzioni su molti notebook (e su alcuni desktop), spesso non funziona così com'è, senza interventi esterni. Il problema su molte macchine in cui ci si aspetta che funzioni in linea di principio, sta nel fatto che le schede grafiche non vengono reinizializzate correttamente durante l'uscita dalla sospensione, il che spesso significa che la retro-illuminazione del display del notebook resta spenta. Numerosi suggerimenti sulle misure da seguire sono disponibili nell'articolo all'indirizzo SDB:Suspend_to_RAM. s2ram è un programma, il quale implementa la gran parte delle soluzioni di ripiego (anche dette workaround) per avere "la luce di nuovo accesa" dopo il risveglio dalla sospensione. Lo si trova pronto per l'installazione nel pacchetto suspend. Si può accedere a documentazione aggiuntiva nella documentazione del kernel (pacchetto "kernel-source"), sul file /usr/src/linux/Documentation/power/video.txt.

Per i primi tentativi di ottenere la sospensione su RAM (per lo meno se non funziona senza interventi fin da subito), risulta utile avviare con un sistema minimo e procedere passo dopo passo verso un sistema completamente funzionante. Questo sistema minimo è descritto qui di seguito.

Per essere in grado di modificare il parametro vga=... in modo confortevole al prompt di GRUB (il kernel riconosce soltanto la prima impostazione relativa a vga), è massimamente conveniente spostare questo parametro in /boot/grub/menu.lst dopo la parola chiave "showopts", così da poterla editare (facilmente) ad ogni avvio del sistema.

Una voce corrispondente potrebbe apparire come questa (ad esempio):

###Don't change this comment - YaST2 identifier: Original name: linux###
title SUSE LINUX 9.3
    kernel (hd0,4)/vmlinuz root=/dev/hda7 selinux=0 splash=silent sysrq=yes resume=/dev/hda6 showopts vga=0x342 
    initrd (hd0,4)/initrd

Per provare con una configurazione minima, aggiungi "init=/bin/bash" alle tue opzioni di avvio al prompt di grub, disponibile all'avvio della macchina. Il kernel avvierà allora direttamente all'interno di una shell, tralasciando tutti gli script di avvio. A questo punto si può richiamare la sospensione "a mano":

# motaggio di /proc e /sys:
mount /proc
mount /sys
# per la sospensione su disco, attiva ora la swap. Non è necessario per la sospensione su RAM:
# swapon -a
# richiama suspend to RAM ("disk" per suspend to disk):
echo mem > /sys/power/state

La macchina a questo punto dovrebbe andare in sospensione (di solito segnalata da un LED che lampeggia). Risvegliala (a seconda della macchina) con il pulsante di accensione/spegnimento, chiudendo/aprendo il coperchio o premendo il tasto Fn (il LED che indica se il computer è acceso sarà di nuovo acceso). Il LED di funzionamento dei dischi rigidi probabilmente lampeggerà brevemente ma dovrebbe di nuovo spegnersi. Se il display è in funzione e il contenuto precedente alla sospensione è di nuovo visibile, l'esperimento è terminato: la sospensione funziona. Se il display resta nero, si continua qui sotto.

Per prima cosa controlla se è "solo" il display che resta nero oppure se la macchina è completamente inattiva. Inserisci alla cieca

find /

Se il LED di funzionamento dei dischi rigidi a questo punto sta lampeggiando, allora il resto del sistema dovrebbe essere funzionante, e soltanto la scheda grafica richiederà un po' di lavoro aggiuntivo. Il comando find che è stato or ora lanciato non può essere interrotto con init=/bin/bash: devi spegnere e poi riaccendere, oppure premi il pulsante di reset.

Se fin qua tutto funziona, prosegui con i suggerimenti forniti nell'articolo all'indirizzo SDB:Suspend_to_RAM. Se con quelli otterrai un risultato positivo, ti chiediamo di segnalarcelo, in modo tale che possiamo aggiungere la tua macchina alla whitelist.