2012-04-15 6 views
6

Moje pytanie jest dość szerokie, wiem, ale zastanawiam się nad tym od dłuższego czasu.Czy złe urządzenie USB może spowodować awarię jądra systemu Linux bezbłędnie?

Małe tło. Pracuję w laboratorium fizyki, w którym wszystkie komputery laboratoryjne pracują w systemie Debian (połączenie starej wersji i Lenny'ego) lub ostatnio Ubuntu 10.4 LTS. Napisaliśmy wiele niestandardowych programów do interfejsu ze sprzętem eksperymentalnym i innymi komputerami.

Mamy wiele kart FPGA, które kontrolują różne części eksperymentu, są one połączone przez USB z różnymi komputerami. Po uaktualnieniu komputera sterującego eksperymentem zaczęliśmy zauważać awarie/blokady komputera, na którym działają wszystkie lasery. To było w pełni stabilne.

Moje pytanie jest takie: Jeśli cała zamki Komputer się z powodu problemu z a) Python/GTK gui oprogramowanie b) sterownik urządzenia USB lub c) Rzeczywista urządzenie to może być obwiniany o Linuksie jądro (lub inne poziomy systemu operacyjnego)?

Czy to niesprawiedliwe, aby poprosić jądro Linuxa, aby nie wpadał w panikę, nawet jeśli popełniam błędy przy wdrażaniu oprogramowania/sprzętu.

Moje własne przypuszczenie: każda aplikacja na poziomie użytkownika nigdy nie powinna być w stanie awarię całego systemu, ponieważ powinny one mieć tylko dostęp do własnych rzeczy.

Dowolny sterownik urządzenia staje się częścią jądra i dlatego może go zawiesić. Czy moje rozumowanie brzmi?

Dodatkowe pytanie: czy istnieje sposób na izolację urządzenia i jądra w jakiś sposób, aby system Linux działał szczęśliwie bez względu na to, jakie głupie błędy zostały popełnione przy użyciu sprzętu. Byłoby to bardzo przydatne z dwóch powodów: 1) debugowanie jest łatwiejsze dzięki uruchomionemu systemowi, 2) Na potrzeby eksperymentu naprawdę potrzebujemy długich uptimes i mając tylko część awarii systemu jest nieskończenie lepiej niż awarie w jednym część systemu propaguje się do reszty.

Wszelkie linki i materiały do ​​czytania na ten temat będą mile widziane. Dziękuję Ci.

+0

Nie jestem ekspertem od awarii, ale powiedziałbym, że masz rację w swoich przypuszczeniach. O pytanie premiowe, _logiczne_ błędy (np. Zły protokół) powinny być poradzone sobie przez jądro bez żadnych dalszych problemów; ale błędy _phisical_ (np. zwarcie, przeciążenie itp.) nie mogą być w ogólności zarządzane przez jądro i będą powodować różne poziomy katastrofy. – rodrigo

Odpowiedz

3

Masz rację, że kod nieuprzywilejowany nie powinien być w stanie zniszczyć systemu, chyba że wystąpił błąd jądra. Granica między nieuprzywilejowanym a uprzywilejowanym nie jest jednak dokładnie taka sama jak w przestrzeni użytkownika i jądra. Program trybu użytkownika może otworzyć /dev/kmem i zniszczyć wewnętrzne struktury danych systemu operacyjnego, jeśli konto użytkownika ma uprawnienia administratora.

Aby odizolować główne jądro od problemów sterownika urządzenia, uruchom sterownik urządzenia wewnątrz maszyny wirtualnej.

Kilka popularnych systemów VM, w tym VMWare Workstation, obsługuje przekazywanie dowolnego urządzenia USB z hosta do gościa, bez sterownika urządzenia na hoście.

+0

Kolejne pytanie. Zakładając, że sterownik urządzenia został poprawnie napisany, jakakolwiek awaria sprzętu (podłączonego urządzenia) nie powinna być w stanie doprowadzić do awarii systemu, prawda? – HansHarhoff

+0

@HansHarhoff: Tak długo, jak uszkodzony sprzęt nie powoduje, że maksymalne dopuszczalne tolerancje określone dla portu komputera, do którego jest podłączony, są naruszone, to prawda.Większość hostów USB jest odporna na zwarcia, na przykład. Z drugiej strony, jeśli masz skok błyskawicy na kabel USB, wszystkie zakłady są wyłączone, ponieważ maksymalne oceny zostaną przekroczone. –

+0

Moją dwiema głównymi obawami są, jak mówisz, zwarcia w porcie USB (lub przynajmniej spadki napięcia) i przypadkowe/nagłe odłączenie sprzętu. Mamy zamiar przetestować, czy zasilane koncentratory USB mogą działać jako bufor dla zwarcia. W odniesieniu do nagłego usunięcia, myślę, że ważne jest, aby mieć trochę czasu na czekanie na odpowiedź. – HansHarhoff