Czy sterownik urządzenia w systemie Linux jest programem / procesem, czy jest to tylko biblioteka?


23

Czy sterownik urządzenia to program, który działa samodzielnie, czy jest to po prostu biblioteka (grupa funkcji) załadowana do pamięci, a programy mogą wywoływać jedną z jego funkcji (więc nie działa samodzielnie).

A jeśli jest to program, czy ma identyfikator procesu, więc czy mogę na przykład zakończyć sterownik urządzenia w taki sam sposób, jak mogę zakończyć każdy inny proces?


1
Możesz „rozładować” sterownik za pomocą rmmod, ale tylko jeśli nie jest używany.
pjc50 16.10.17

Odpowiedzi:


35

W systemie Linux wiele sterowników urządzeń jest częścią jądra, a nie bibliotek lub procesów. Programy interakcję z wykorzystaniem tych plików urządzeń (zazwyczaj /dev) i różne wywołań systemowych, takich jak open, read, write, ioctl...

Istnieją jednak wyjątki. Niektóre sterowniki urządzeń używają kombinacji kodów pośredniczących sterowników jądra i bibliotek przestrzeni użytkownika ( np. Za pomocą UIO). Inne są zaimplementowane całkowicie w przestrzeni użytkownika, zwykle na niektórych interfejsach bitowych (UART lub GPIO). W obu przypadkach są one na ogół w trakcie przetwarzania, więc nie zobaczysz osobnego procesu, tylko proces korzystający z urządzenia.

Aby „zakończyć” sterownik urządzenia, musisz zatrzymać wszystkie procesy, które go używają, a następnie usunąć jego moduły jądra (zakładając, że są one zbudowane jako moduły) i opcjonalnie wszelkie inne moduły, których używa i które nie są już potrzebne. Możesz wymienić moduły w systemie za pomocą lsmodi zwolnić je za pomocą rmmodlub modprobe -r, oba będą działać tylko wtedy lsmod, gdy wskaże, że nie mają użytkowników.


2
Jeśli jesteś wystarczająco odważny, a twoje jądro zostało skompilowane CONFIG_MODULE_FORCE_UNLOAD, możesz spróbować rmmod -fwymusić zwolnienie modułów, które są w użyciu / nie są zaprojektowane do usuwania / itp. To oprócz tego, że po prostu spowoduje, że jądro stanie się zawodne, również skażają jądro.
Ruslan

9

Najpierw musisz zdefiniować, czym jest kierowca. Zdefiniuję go jako program lub podprogram sterujący urządzeniem (takim jak kamera) lub podsystemem (jak system plików). To, czy robi to bezpośrednio za pośrednictwem programu systemowego, serwerów jądra lub procesów użytkownika-użytkownika, nie powinno mieć zasadniczego znaczenia dla tego zasadniczo semantycznego pytania.

W niektórych przypadkach Linux zapewnia jedynie ogólny protokół napisany w oprogramowaniu, w którym rzeczywistym „sterownikiem” jest drzewo urządzeń. Jest to konfiguracja parametrów sprzętowych i oprogramowania, z którego należy utworzyć sterownik.

Ogólnie mówiąc, interfejsy i protokoły sterowników są implementowane przy użyciu modułów jądra, które są ładowane zgodnie z potrzebami zdefiniowanymi przez drzewa urządzeń lub reguły udev. Moduł jądra nie jest w najściślejszym sensie procesem ani biblioteką.

Biblioteka to tylko statyczny zestaw kodu, który można załadować do dowolnego procesu. Nowoczesne systemy operacyjne ładują te biblioteki do pamięci współdzielonej. Proces może sam połączyć się z dowolną liczbą bibliotek współdzielonych.

Proces to działający program, w którym program systemowy lub jądro przydzieliły zasoby, takie jak pamięć systemowa i czas procesora. Moduły jądra mogą, ale nie muszą, stosować się do tego wzorca, ale niezależnie od tego, nie są uważane za procesy defacto w systemie Linux.

Aby odpowiedzieć na twoje pytanie, kierowca nie musi być procesem, ale może być. Chociaż kod może istnieć w bibliotece, sterownik jest nadal ładowany do pamięci za pośrednictwem programu, niezależnie od tego, czy jest to jądro w postaci modułów jądra, czy procesów użytkownika.

Staje się bardziej semantycznym argumentem przy rozważaniu, czym w rzeczywistości jest kierowca. Można powiedzieć, że sterownik jest zawsze programem, ale czasami nie jest tak, jak w przypadku drzew urządzeń, może to być tak naprawdę proces użytkownika, plik drzewa urządzeń, reguły udev i moduł jądra, gdzie zarówno proces, jak i moduł używają bibliotek, aby uzupełnić logika kierowcy.


0

Sterownik urządzenia Linux jest w zasadzie biblioteką jądra . Jego wywołania są inicjowane głównie przez sterowniki wyższego poziomu lub procesy przestrzeni użytkownika, które go wykorzystują.

Jest tylko kilka wyjątków od tego:

  • Wątki jądra mogą być uruchamiane / zatrzymywane także przez sterowniki, są to zasadniczo procesy bez części przestrzeni użytkownika.
  • Procedury obsługi przerwań są inicjowane przez sprzęt, a nie przez procesy w przestrzeni użytkownika.

W innych systemach, takich jak GNU Hurd, sterowniki są zasadniczo demonami, z którymi procesy mogą oddziaływać. W Linuksie sterowniki są bibliotekami. Obie koncepcje mają jednak swoje zalety i wady.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.