Mam nadzieję uzyskać sugestie oparte na doświadczeniu, jak przejść do debugowania problemu zawieszenia do pamięci RAM. Porady specyficzne dla mojej sytuacji (wyszczególnione poniżej) byłyby świetne, ale interesują mnie również ogólne porady dotyczące rozwiązywania takich problemów.
Problem:
Często, gdy próbuję zawiesić maszynę, utknie ona w stanie „nie zawieszony, ale nie przebudzony”. Często ekran jest całkowicie czarny, ale czasami pojawia się następujący komunikat o błędzie:
GLib-WARNING **: getpwuid_r(): failed due to unknown user id (0)
Towarzyszyć temu będą także fani wrzucający wysokie biegi. Jedynym sposobem na wyjście z tego stanu jest ręczne wyłączenie laptopa.
Trochę informacji
$ uname -a
Linux baltar 2.6.35-22-generic #34-Ubuntu SMP Sun Oct 10 09:26:05 UTC 2010 x86_64 GNU/Linux
$ lsb_release -a
Distributor ID: Ubuntu
Description: Ubuntu 10.10
Release: 10.10
Codename: maverick
Wziąłem okiem na /var/log/dmesg
i /var/log/pm-suspend.log
, ale nie wiem, co ja szukam i nic nie stoi na zewnątrz. Nie jestem pewien, czy jest to powiązane, ale znalazłem wiele z poniższych /var/log/kern.log
:
EXT4-fs (dm-0): re-mounted. Opts: errors=remount-ro,commit=600
No LSB modules are available.
wyświetlane zaraz polsb_release -a
.Odpowiedzi:
Czy masz chipset graficzny Intel? Dostawałem coś, co brzmi jak ten sam problem na moim ThinkPadzie X200 z systemem Ubuntu 10.10, a to obejście (od 2008 roku!) Naprawiło to dla mnie: http://ubuntuforums.org/showpost.php?p=6105510&postcount=12
źródło
PM_DEBUG i PM_TRACE to najwyraźniej najgłębsze dostępne obecnie narzędzia do debugowania. Gdy nie otrzymujesz nic znaczącego z dzienników wyższego poziomu, AFAIK jest to jedyny mechanizm, na który można polegać, gdy napotykasz przerażający objaw „tajemniczego pustego ekranu po wznowieniu”. Najczęściej mamy do czynienia z dość często subtelnie uszkodzonym sterownikiem urządzenia. Możesz także zapoznać się z moją sagą debugowania sterownika bezprzewodowego brcmsmac Broadcom przy błędzie jądra 34682, aby dowiedzieć się, co sugerują i szukają programiści jądra.
źródło
Podejrzewam, że problem może wynikać z nieprawidłowego zgłaszania przez BIOS tego, jakiego lowmem naprawdę używa.
Domyślnie ta opcja działa:
Możesz spróbować ustawić to na większe wartości, aby skaner niszczenia pamięci zbadał większą część lowmem.
Poszukaj „rozmiar_kontroli_wybicia_ pamięci” w
itp.
Chciałbym wiedzieć, co znajdziesz, jeśli w ogóle.
źródło
Moje doświadczenie w pracy w tym obszarze dotyczyło Windows CE, a nie Linuksa.
Podczas cyklu zawieszenia / wznawiania system operacyjny będzie stopniowo wyłączał funkcjonalność systemu operacyjnego, ograniczając możliwość uzyskania dokładnych i wiarygodnych informacji o tym, co się dzieje z użyciem funkcji systemu operacyjnego. Ponadto połączenie monitorujące może (np. Jeśli problem dotyczy czasu) zmienić wynik.
Narzędzia preferencyjne zaczynają się od połączenia debugera C / C ++ z systemem operacyjnym na wysokim poziomie, a na bardzo niskim poziomie wysyłania danych do portu szeregowego / kodów POST lub na sprzętowy debugger JTAG lub równoważne. Efektem końcowym są długie godziny pracy nad przepływem kodu i znalezienie punktu, w którym zachowuje się on inaczej niż normalne zachowanie. W tym momencie poprawka jest zwykle oczywista. Rób dobre notatki i wprowadzaj jedną zmianę na raz.
Identyfikacja problemu z uruchomieniem systemu Windows CE zajęła 6 tygodni. Mieliśmy płytę z procesorem PC104, którą mogliśmy wyłączyć na 10 lub 60 sekund i włączyć bez żadnych problemów. Jednak jeśli zasilanie zostanie odłączone na 25 sekund, nie uruchomi się. Okazało się, że mieliśmy wystarczającą pojemność, aby utrzymać zawartość DRAM w stanie nienaruszonym bez zasilania przez około 20 sekund, więc w krótkim cyklu wyłączania Windows CE pomyślał, że wznawia się ze stanu zawieszenia. Gdy cała pamięć zostanie zachowana, rzeczywiście uda się jej wznowić, gdy pamięć zostanie częściowo uszkodzona, będzie raczej mylona podczas wznawiania.
Powodzenia.
źródło