Przegląd PCI w Linux

Przegląd PCI w Linux
Interconnect komponentu peryferyjnego lub PCI to protokół zdefiniowany na początku obliczeń przez Intel. Jak sama nazwa wskazuje, PCI służy do łączenia różnych urządzeń peryferyjnych platformy Linux. Prosty schemat blokowy systemu PCI będzie wyglądał poniżej:

Powyższy rysunek pokazuje system PCI, który ma 3 autobusy PCI. Bus nr 0 jest podstawową magistralą systemu, ponieważ procesor jest podłączony do tej magistrali; Również jest to autobus, w którym obecny jest most portowy lub kompleks korzeniowy.

Inne autobusy, ja.mi., Bus nr 1 i 2 są podłączone do podstawowej magistrali za pomocą mostów PCI. Autobus nr 1 jest podłączony do autobusu nr 0 z mostem 1. Bus nr 2 jest podłączony do autobusu nr 1 z mostem nr 2. Ogólnie wszystkie urządzenia są podłączone, a kilka urządzeń D1, D2, D3 itp., są obecne w różnych autobusach PCI. W dowolnym systemie PCI obecne są 3 rodzaje urządzeń. Port root lub złożone urządzenie, urządzenie mostowe i urządzenia końcowe. Porównując typy urządzeń z naszym przykładowym diagramem, procesor jest portem root lub złożonym urządzeniem. Most 1, Bridge 2 to urządzenia PCI Bridge. D1, D2, D3 itp., Czy urządzenia końcowe PCI w systemie. D3 jest obecny w Bus nr 2 i Bus nr 3, to samo urządzenie w różnych autobusach.

Przestrzeń lub nagłówek konfiguracji PCI:

Wszystkie urządzenia PCI mają przestrzeń konfiguracyjną lub nagłówek. To jest standardowy obszar pamięci obecny we wszystkich urządzeniach. Istnieją dwa typy nagłówka konfiguracji PCI, w oparciu o dwa typy (most i punkt końcowy) urządzeń PCI. Spacja konfiguracyjna jest znana jako typ 0 dla urządzenia końcowego i typu 1 dla mostów PCI. Pola nagłówka konfiguracji to zdefiniowane specyfikacje PCI.

Nagłówek konfiguracji typu 0:

Nagłówek konfiguracji typu 1:

Wyliczenie magistrali PCI:

Podczas rozruchu systemu rozpoznawanie wszystkich urządzeń PCI w systemie jest wykonywane i jest znane jako wyliczenie magistrali PCI. BIOS ogólnie wymienia wszystkie urządzenia PCI obecne na wszystkich autobusach i zaludniają je do SYSFS. Użytkownicy mogą uzyskać dostęp do szczegółów urządzeń PCI obecnych za pomocą narzędzia LSPCI. Innym sposobem jest przeglądanie plików SYSFS wewnątrz /sys/bus/pCI/urządzenia informator. W tym katalogu będą zawierane wszystkie urządzenia i znane z jądro Linux.

Po wyliczeniu magistrali PCI wszystkie urządzenia otrzymują numer, liczbę i numer funkcji. Te trzy komponenty wystarczą do zlokalizowania dowolnego urządzenia.

Wyliczenie magistrali PCI jest wykonywane przez BIOS (podstawowy system wyjściowy wejściowych). BIOS to oprogramowanie oprogramowania układowego specyficzne dla maszyny/platformy i zapewniane przez sam producenta.

Kompleks z kompleksem korzeni jądra Linux:

Na dowolnej platformie Linux opartej na X86 znajduje się podsystem złożony PCI lub Linux PCI, który odczytuje informacje wypełnione przez BIOS i eksportuje informacje do systemu plików SYSFS. Wszystkie urządzenia PCI obecne w systemie można znaleźć wewnątrz /sys/bus/pCI/urządzenia informator. Kompleks korzeniowy zapewnia również elastyczność w ratowaniu lub zresetowaniu urządzeń w dowolnej magistrali PCI. Nawet pełne ratowanie wszystkich autobusów PCI można wykonać za pomocą/SYS/Bus/PCI/Rescan.

Rozkazanie ocsowania wszystkich urządzeń:

echo 1>/sys/bus/pCI/Rescan

Użytkownicy powinni mieć prawa Superuser do wydania tego polecenia.

W przypadku dowolnego urządzenia w katalogu SYSFS możemy znaleźć poniżej szczegóły/informacje:

Sushil-Machine $ LS/SYS/BUS/PCI/Devices/0000 \: 00 \: 00.0/ -L
Całkowita 0
-rw-r-r-- 1 root root 4096 4 października 17:34 Broken_parity_status
-r-r-r-- 1 root root 4096 2 października 18:19 klasa
-RW-R-R-- 1 root root 4096 2 października 18:19 Config
-r-r-r-- 1 root root 4096 4 października 17:34
-rw-r-r-- 1 root root 4096 4 października 17:34 D3Cold_Allowed
-R-R-R-- 1 root 4096 października 18:19 Urządzenie
-r-r-r-- 1 root root 4096 4 października 17:34 DMA_MASK_BITS
LRWXRWXRWX 1 root root 0 października 19:18 Driver ->… /… /… /bus /pCi /Drivers /Agpgart -Intel
-RW-R-R-- 1 root root 4096 4 października 17:34 Driver_override
-rw-r-r-- 1 root root 4096 4 października 17:34
-r-r-r-- 1 root root 4096 2 października 18:19 irq
-r-r-r-- 1 root root 4096 4 października 17:34 Local_Cpulist
-r-r-r-- 1 root root 4096 4 października 17:34 local_cpus
-r-r-r-- 1 root root 4096 2 października 19:18 modalias
-rw-r-r-- 1 root root 4096 4 października 17:34 MSI_BUS
-rw-r-r-- 1 root root 4096 2 października 19:18 NOMA_NODE
DRWXR-XR-X 2 Korzenie korzenia 0 października 17:34 Moc
--W-w ---- 1 root root 4096 4 października 17:34 Usuń
--W-w ---- 1 root root 4096 4 października 17:34 Rescan
-R-R-R-- 1 Korzenie root 4096 2 października 18:19 Zasób
-r-r-r-- 1 root root 4096 4 października 17:34 Wersja
LRWXRWXRWX 1 root root 0 października 4 17:34 Podsystem ->… /… /… /bus /PCI
-r-r-r-- 1 root root 4096 4 października 17:34 Podsystem_Device
-r-r-r-- 1 root root 4096 4 października 17:34 Podsystem_vendor
-rw-r-r-- 1 root root 4096 4 października 17:34 Uevent
-r-r-r-- 1 root root 4096 2 października 18:19 Sprzedawca
Sushil-Machine $

Powyżej znajdują się pliki obecne dla każdego urządzenia na innej ścieżce.

Przeczytamy zawartość kilku plików, aby zweryfikować informacje:

Sushil-Machine $ cat/sys/bus/pCi/Devices/0000 \: 00 \: 00.0/urządzenie
0x7190 // plik urządzenia zapewnia urządzenieDID
Sushil-Machine $ cat/sys/bus/pCi/Devices/0000 \: 00 \: 00.0/Sprzedawca
0x8086 // plik dostawcy zapewnia dostawę
Sushil-Machine $

Podobnie inne pliki zawierają inne informacje.

Niektóre pliki to pliki tylko do zapisu: usuń i skanuj

usunąć Pliki można użyć do usunięcia urządzenia. Echo 1 do pliku, a zobaczysz, że LSPCI nie wyświetli tego urządzenia.

echo 1>/sys/bus/pCi/Devices/0000 \: 00 \: 00.0/Usuń

Odzyskiwanie urządzenia z poprzedniego kroku można wykonać poprzez rekulowanie urządzenia.

Echo 1 do Rescan plik z poniższym poleceniem:

echo 1>/sys/bus/pCi/Devices/0000 \: 00 \: 00.0/Rescan

Czytanie i pisanie do przestrzeni konfiguracji:

Dostępne są polecenia LSPCI i SETPCI, których można użyć do odczytu i zapisu przestrzeni konfiguracji dowolnego urządzenia PCI. LSPCI ma bardzo bogate opcje dostosowywania danych wyjściowych zgodnie z potrzebami użytkownika. SETPCI to kolejne narzędzie, które można również użyć do dostępu do przestrzeni konfiguracji urządzenia PCI.

Nie będziemy ich szczegółowo omawiać, ponieważ istnieje osobny artykuł szczegółowo omówienie obu tych narzędzi. Będziemy mieć tylko jeden przykład obu poleceń:

LSPCI:

Sushil -Machine $ LSPCI -D: 7190
00:00.0 most hosta: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Bridge (Rev 01) //

setpci:

Sushil -Machine $ setpci -s 00:00.0 0.w
8086 // wyjście; Czytanie słowa z przesunięcia 0 w przestrzeni konfiguracji. Identyfikator dostawcy to wyjście.

Czytanie i pisanie przestrzeni barowej:

Może być w sumie 6 32-bitowy bar lub 3 64-bitowy bar. Można odwołać przestrzeń konfiguracyjną typu 0, aby uzyskać szczegółowe informacje o przesunięciu paska.

Weźmy przykład urządzenia z poniższym wyjściem:

03:00.0 kontroler Ethernet: VMware VMXNET3 Ethernet Controller (Rev 01)
Podsystem: VMware VMXNET3 Ethernet Controller
Fizyczne miejsce: 160
Kontrola: we/o+ mem+ busmaster+ speccycle- memWinv- vgasnoop- parerr-ppping-serr- fastb2b- disintx+
Status: CAP+ 66MHZ-UDF- FASTB2B- PARERR- devsel = Fast> Tabort- -RW-R-R-- 1 root root 4096 4 października 18:01 Driver_override
-rw-r-r-- 1 root root 4096 4 października 18:01 Włącz
LRWXRWXRWX 1 root root 0 4 października 18:01 STREAWORE_NODE ->…/…/…/lnxSystm: 00/lnxsybus: 00/pnp0a03: 00/urządzenie: 89/urządzenie: 8a
-r-r-r-- 1 root root 4096 2 października 18:19 irq
-R-R-R-1 root root 4096 4 października 17:57 etykieta
-r-r-r-- 1 root root 4096 4 października 18:01 local_cpulist
-r-r-r-- 1 root root 4096 4 października 18:01 local_cpus
-r-r-r-- 1 root root 4096 4 października 18:01 max_link_speed
-r-r-r-- 1 root root 4096 4 października 18:01 MAX_LINK_WIDTH
-r-r-r-- 1 root root 4096 4 października 17:57 modalias
-rw-r-r-- 1 root root 4096 4 października 18:01 MSI_BUS
DRWXR-XR-X 2 Korzenie korzenia 0 października 18:01 MSI_IRQS
DRWXR-XR-X 3 Korzenie korzenia 0 lipca 06:53 Net
-RW-R-R-- 1 root root 4096 4 października 17:57 NOMA_NODE
DRWXR-XR-X 2 Korzenie korzenia 0 października 18:01 Moc
--W-w ---- 1 root root 4096 4 października 18:01 Usuń
--W-w ---- 1 root root 4096 4 października 18:01 Rescan
--W ------- 1 korzeń root 4096 4 października 18:01 Resetuj
-R-R-R-- 1 Korzenie root 4096 2 października 18:19 Zasób
-RW ------- 1 root root 4096 4 października 18:01 Zasób0
-RW ------- 1 root root 4096 4 października 18:01 Zasób1
-RW ------- 1 root root 8192 4 października 18:01 Zasób2
-RW ------- 1 Root 16 października 4 18:01 Zasób3
-r-r-r-- 1 root root 4096 4 października 18:01 Wersja
-RW ------- 1 Root root 65536 4 października 18:01 Rom
LRWXRWXRWX 1 Korzeń root 0 października 18:01 Podsystem ->… /… /… /… /bus /PCI
-r-r-r-- 1 root root 4096 4 października 18:01 Podsystem_Device
-r-r-r-- 1 root root 4096 4 października 18:01 Podsystem_vendor
-rw-r-r-- 1 root root 4096 4 października 18:01 Uevent
-r-r-r-- 1 root root 4096 2 października 18:19 Sprzedawca
Sushil-Machine $

Obecne są dodatkowe pliki z zasobem nazw [0-3]; Są to pliki, które można użyć do dostępu do pamięci zmapowanej do tych regionów. Na przykład, aby uzyskać dostęp do przestrzeni 4K do regionu 0, plik Resource0 można zmapować na przestrzeń użytkownika za pomocą funkcji mmap (). Po odwzorowaniu regionu 0 na przestrzeń użytkownika można uzyskać dostęp do przestrzeni 4K, zgodnie z potrzebą/wymaganiem.

Wniosek:

Podsystem Linux PCI wymienia i zaludni się do urządzeń PCI. Urządzenia LSPCI i SETPCI mogą być używane do uzyskania informacji o urządzeniach. Kompleksowe sterownik Linux dostarcza również wszystkie informacje o urządzeniach PCI w plikach SYSFS. Istnieje przepis zresetowania, resecowania i usunięcia urządzeń z plików SYSFS. BIOS wykonuje proces wyliczenia, a sterownik systemu Linux analizuje informacje i odpowiednio wypełnia wszystkie informacje urządzenia. Dzięki tak dużej dyskusji zakończmy ten temat.