W systemie Linux, biorąc pod uwagę:
- urządzenie, na przykład
/dev/sda
, - i jej główne i poboczne numery, na przykład
8, 0
,
skąd mam wiedzieć, który moduł / sterownik go „prowadzi”?
Czy mogę to zagłębić /sys
lub /proc
odkryć?
linux
drivers
kernel-modules
Totor
źródło
źródło
lsmod
,/proc/modules
imodinfo
?Odpowiedzi:
Aby uzyskać te informacje z
sysfs
pliku urządzenia, najpierw określ numer główny / pomocniczy, patrząc na wynikls -l
np8, 0
Mówi nam, że liczba ta jest głównym8
i moll0
. Nab
początku listy znajduje się także informacja, że jest to urządzenie blokowe. Inne urządzenia mogą miećc
na początku urządzenie postaci.Jeśli spojrzysz poniżej
/sys/dev
, zobaczysz, że są dwa katalogi. Jeden dzwonił,block
a drugi dzwoniłchar
. Nie trzeba tutaj myśleć, że są one odpowiednio dla urządzeń blokowych i postaci. To urządzenie jest następnie dostępne pod jego głównym / podrzędnym numerem w tym katalogu. Jeśli dla urządzenia dostępny jest sterownik, można go znaleźć, czytając celdriver
łącza w tym lubdevice
podkatalogu. Na przykład/dev/sda
mogę po prostu zrobić:To pokazuje, że
sd
sterownik jest używany dla urządzenia. Jeśli nie masz pewności, czy urządzenie jest urządzeniem blokowym lub znakowym, w powłoce możesz po prostu zastąpić tę część znakiem*
. Działa to równie dobrze:Dostęp do urządzeń blokowych można również uzyskać bezpośrednio poprzez ich nazwę za pomocą jednego
/sys/block
lub dwóch/sys/class/block
. Na przykład:Zauważ, że istnienie różnych katalogów
/sys
może się zmieniać w zależności od konfiguracji jądra. Również nie wszystkie urządzenia majądevice
podfolder. Tak jest na przykład w przypadku plików urządzeń partycji, takich jak/dev/sda1
. Tutaj musisz uzyskać dostęp do urządzenia dla całego dysku (niestety nie masys
do tego linków).Ostatnią rzeczą, która może być przydatna, jest lista sterowników dla wszystkich urządzeń, dla których są one dostępne. W tym celu można użyć globs, aby wybrać wszystkie katalogi, w których znajdują się łącza sterowników. Na przykład:
Na koniec, aby nieco odejść od pytania, dodam kolejną
/sys
globalną sztuczkę, aby uzyskać znacznie szerszą perspektywę, które sterowniki są używane przez poszczególne urządzenia (choć niekoniecznie te z plikiem urządzenia):Aktualizacja
Przyglądając się dokładniej wynikowi
udevadm
, wydaje się, że działa, znajdując/sys
katalog kanoniczny (tak jak w przypadku wyrejestrowania głównych / mniejszych katalogów powyżej), a następnie przesuwając się w górę drzewa katalogów, wypisując wszelkie znalezione informacje. W ten sposób otrzymujesz informacje o urządzeniach nadrzędnych i wszelkich używanych przez nich sterownikach.Aby eksperymentować z tym, napisałem poniższy skrypt, aby przejść do drzewa katalogów i wyświetlić informacje na każdym odpowiednim poziomie.
udev
wydaje się szukać plików na każdym poziomie z włączonymi ich nazwami i zawartościąATTRS
. Zamiast tego wyświetlam zawartośćuevent
plików na każdym poziomie (pozornie obecność tego określa odrębny poziom, a nie tylko podkatalog). Pokazuję również basename wszystkich znalezionych linków podsystemów, a to pokazuje, jak urządzenie pasuje do tej hierarchii.udevadm
nie wyświetla tych samych informacji, więc jest to miłe narzędzie uzupełniające. Informacje o urządzeniu nadrzędnym (np.PCI
Informacje) są również przydatne, jeśli chcesz dopasować dane wyjściowe innych narzędzi, takich jaklshw
urządzenia wyższego poziomu.źródło
udevadm
odpowiedź da cisd
iahci
. Czy istnieje sposób, aby ustalić,ahci
czy również jest używany?device/device/
, więc mojereadlink
polecenie wyglądało takreadlink /sys/dev/char/XX\:Y/device/device/driver
.Możesz użyć tego
udevadm
narzędzia, aby to odkryć.Polecenie to
udevadm info -a -n /dev/sda
, a następnie spójrz naDRIVER==
parametry.To pokazuje, że w rzeczywistości w zapewnienie tego urządzenia są zaangażowane 2 sterowniki,
sd
orazahci
. Pierwszysd
jest bezpośrednio odpowiedzialny za/dev/sda
urządzenie, ale korzysta zeahci
sterownika pod spodem.Dane wyjściowe
udevadm
polecenia wyglądają tak i zawierają opis działania.źródło
udevadm
został usunięty (a nawet zalecany)? Nie mogę znaleźć niczego, co dałoby na to podpowiedź.Użyj polecenia hwinfo oraz modelu wyjściowego i sterownika. Jeśli nie ma sterownika, nie zostanie wyświetlony. Na przykład dla dysków:
W przypadku kart sieciowych:
W przypadku urządzeń USB:
Użyj hwinfo --help, aby dowiedzieć się, jakie inne typy urządzeń możesz zapytać. hwinfo jest instalowane domyślnie np. w SUSE Linux.
źródło
--only
opcji. Nphwinfo --block --only /dev/sda | grep ...
.lshw
to niesamowite narzędzie do wyświetlania listy sprzętu znalezionego w twoim komputerze. Przed uruchomieniem musisz go najpierw zainstalować.Użyj
yum
lub wapt-get
zależności od używanego systemu. Następnie, aby szczegółowo wymienić sprzęt pamięci masowej:Możesz go uruchomić,
root
aby odzyskać wszystkie informacje.W przeciwnym razie
lspci
może również podać informacje o twoim sprzęcie:Aby dowiedzieć się o głównej i mniejszej liczbie urządzeń, po prostu
ls
na nim uruchom .W tym wyjściu
b
inbrw-rw----.
oznacza, że jest to urządzenie blokowe. Cyfry8
i0
są odpowiednio główną i podrzędną liczbą urządzenia.źródło
lshw
ilspci
można zobaczyć moduł używany przez urządzenie: konfiguracja: driver = AHCI latency = 0 i sterownik jądra w użyciu: AHCI .