Jądro Linuksa zawiesza się przy „Przełączaniu na źródło zegara” na Pentium 4

11

Sprzęt: Dell Dimension 4500S : i845G, Pentium 4, podstawowy + 2 GB pamięci RAM i najnowsza (około 2002) aktualizacja BIOS-u.

Budowałem system Linux ze źródła, jak dotąd według LFS 7.0 . Pierwsze zbudowane przeze mnie jądro działa dobrze, ale ma dużo puchu i wzdęć, dlatego optymalizuję jądro dla mojego docelowego sprzętu (patrz wyżej).

Moja ostatnia próba konfiguracji oraz kilka odmian prób i błędów ciągle wisiały na instrukcji printk „Switching to clocksource tsc”. Moje „dobre” jądro nigdy nie miało problemu ... to jest wersja 3.1.0 btw. Oba są zbudowane z tego samego drzewa źródłowego, bez poprawek, make mrproper, make menuconfigitd, więc oczywiście jestem po prostu brakuje jakiegoś klucza CONFIG_XXXflagę.

Patrzyłem na ten problem od ponad dnia i zbudowałem jądro, które wie ile razy, ale bezskutecznie.

Ciekawe jest dla mnie dobre jądro:

# cat /sys/devices/system/clocksource/clocksource0/current_clocksource
tsc

warto też wiedzieć ...

# cat /sys/devices/system/clocksource/clocksource0/available_clocksource
tsc acpi_pm

Próbowałem konfiguracji kompilacji z różnymi opcjami, ale w tym momencie nie pamiętam żadnych szczegółów, więc nie pytaj. Podczas wyszukiwania znalazłem i przetestowałem kilka parametrów jądra, takich jak clocksource=piti notsc, ale wszystkie one również zawodzą. Znowu chciałbym zapisać wszystko, co do tej pory próbowałem, z perspektywy czasu ...

Większość przykładów forum dotyczy jąder 2.x i zostały rozwiązane z pewną odmianą opcji uruchamiania, ale moje dobre jądro używa tylko root=/dev/sdaX ro. Więc wiem, że jestem złoty dzięki tej kombinacji sprzętu i jądra 3.1.0, jeśli mogę znaleźć odpowiednią konfigurację kompilacji.

Ponadto większość osób, które opublikowały podobny problem, twierdzi, że po kilku minutach system będzie kontynuował ładowanie i wszystko będzie brzoskwiniowe. Pozostawiłem go na tyle długo, by ugotował kolację, i wciąż nie wznowiłem ładowania.

Mam nadzieję, że jeden z was guru przeczyta to i powie „hej tak, właśnie ustawiłem CONFIG_XXX = y na moim dinozaurie P4 i zadziałało świetnie”. :)

Daj mi znać, czego potrzebujesz, aby spróbować lub sprawdzić, chętnie opublikuję wyniki.

rfmodulator
źródło
@tripleee Gdzie mogę zobaczyć te informacje ... powód bliskiego głosowania?
rfmodulator
Może nie możesz, twoja reputacja może nie wystarczyć. W każdym razie, ponieważ nie jest to związane z programowaniem, sensowne jest poruszanie się, ale wystarczy kilka bliższych głosów. Dodam też moje.
tripleee
Mam podobne problemy z nowym jądrem z Pentium 4. Wszystko działa, jeśli wyłączę hyperthreading. Spędziłem dwie noce na debugowaniu, jeszcze nie jestem pewien szczegółów.
choroba
@choroba nohtnie robi tego dla mnie. Daj mi znać, jeśli masz inne pomysły.
rfmodulator
W rzeczywistości musiałem wyłączyć ht na poziomie BIOS-u lub określić acpi=off.
choroba

Odpowiedzi:

8

Z szybkiego wyszukiwania problem ten wydaje się mieć wiele możliwych przyczyn i wskazuje na to, że domyślne ustawienie jądra dla nowego źródła zegara jest nieprawidłowe dla płyty głównej.

Jedną radą, która działała dla niektórych, było użycie clocksource=hpetlub clocksource=acpi_pm.

W innym wątku ktoś to naprawił clocksource=jiffies, inny zalecił spróbowanie noapiclub nolapicinny, aby wyłączyć acpi w BIOS-ie, a jeszcze inny obwinił touchpad Synaptics i naprawił swój problem, usuwając Xorg.conf.

Jeden konstruktor jądra naprawił swój problem, kompilując initrd bez fbcondecor.

Mam nadzieję, że to pomaga, ponieważ wydaje się, że ten problem może mieć wiele przyczyn.

harrymc
źródło
Dziękuję za odpowiedź, jednak szukam opcji konfiguracji kompilacji jądra, które spowodują (lub zapobiegną) zawieszenie się podczas rozruchu, które obserwuję, a nie obejście. Próbowałem wszystkich parametrów rozruchowych ( clocksource=, no* itd.), Które zostały zanotowane w różnych wątkach na forum, bez żadnego efektu. Zrobiłem te eksperymenty, próbując zawęzić mój prawdziwy problem. Mam już jądro, które ładuje się idealnie bez żadnych specjalnych parametrów (oprócz root=i ro) zbudowanych z tego samego drzewa źródłowego, ale to jądro zawiera więcej rzeczy, których nie potrzebuję, niż te, które robię ...
rfmodulator
... z wyjątkiem jednej CONFIG_flagi klucza , która rozwiąże mój problem.
rfmodulator
Czy to możliwe, że masz problem z wyłączeniem zbyt wielu opcji jądra?
harrymc
Dokładnie. :) To jest odpowiedź, której szukam, co właściwie wyłączyłem, co jest naprawdę potrzebne. Zrobiłem to kilka razy bez zmiany wyniku.
rfmodulator
Nie mogę ci pomóc jednym magicznym słowem. Wygląda na to, że Twoim bieżącym źródłem zegara jest acpi_pm, ale musisz zagłębić się w źródła jądra, aby dowiedzieć się o konfiguracji jądra, którą podniosłeś. Inną opcją jest powrót do działającej konfiguracji i wyłączenie opcji przyrostowo, aby zlokalizować problem. Aby cię rozweselić, mogę również powiedzieć, że może to nie być jedna opcja, ale kilka, co oznacza konflikt lub nieudolną kombinację konfiguracji lub nieudokumentowaną zależność.
harrymc
0

Mam dokładnie ten sam problem i dużo przeczytałem. @harrymc zrobił całkiem dobre podsumowanie.

Dodam tylko 2 rzeczy, których nauczyłem się z moich badań:

  • Problem pochodzi z jądra Linuksa, które nie wie, jak obsługiwać procesor, ponieważ nie może ustalić, jaki jest zegar przetwarzania. Możesz to zaobserwować, sprawdzając dziennik rozruchu jądra. Wygląda na to, że jądro próbuje zmierzyć twój zegar przetwarzania (dla mnie było to jak „2997.1333”, ale każdy rozruch zmienia się na „2997.1445”, „2997.1379”, ...).

  • Po wypróbowaniu wielu rzeczy w końcu tu dotarłem i dowiedziałem się o BIOS-ie. Mój to GYGABITE UEFI. Ustawiam parametry z powrotem na „Zoptymalizowane ustawienia domyślne”, a „Intel Virtualization Technology” na „włączone”.

Teraz wszystko wróciło do mnie do normy! Mam nadzieję, że to pomoże.

MaximeBernard
źródło
0

Kilka centów ode mnie, nie jestem pewien, czy to coś powszechnego, czy nie, ale udało mi się sprawić, by Ubuntu działało, wyłączając w BIOSie „precyzyjny zegar”. Mój MB to Gigabyte Z77x-D3h

Oxy
źródło
System OP nie obsługuje High Precision Event Timer. Zostało to wprowadzone w 2005 roku, a system oryginalnego plakatu wyprzedza go o kilka lat.
ChrisInEdmonton,
-2

Rozwiązałem problem, dodając następujący parametr jądra:

noapic
Kiroe
źródło
5
Witamy w Super User. Czy możesz rozszerzyć swoją odpowiedź, wyjaśniając, co to robi / jak rozwiązuje problem PO?
Mówię: Przywróć Monikę
no sry, po prostu bawiłem się parametrami jądra.
Kiroe