Oversikt over PCI i Linux

Oversikt over PCI i Linux
Perifer komponent sammenkobling eller PCI er protokollen som er definert i de første dagene av databehandling av Intel. Som navnet antyder, brukes PCI til å koble forskjellige periferiutstyr av Linux -plattformen. Et enkelt blokkdiagram over PCI -systemet vil se ut som nedenfor:

Figuren ovenfor viser PCI -systemet, som har 3 PCI -busser. Buss nr 0 er den primære bussen til systemet da CPU er koblet til den bussen; Det er også bussen der rotportbroen eller rotkomplekset er til stede.

Andre busser, jeg.e., Buss nr. 1 og 2, er koblet til primærbussen ved hjelp av PCI -broer. Buss nr. 1 er koblet til buss nr. 0 med bro 1. Buss nr. 2 er koblet til buss nr. 1 med bro nr 2. Totalt sett er alle enhetene tilkoblet, og flere enheter D1, D2, D3, etc., er til stede på forskjellige PCI -busser. På et hvilket som helst PCI -system er det 3 typer enheter til stede. Rotport eller kompleks enhet, broenhet og endepunktenheter. Sammenligning av typer enheter med vårt eksempeldiagram, er CPU rotporten eller komplekse enheten. Bridge 1, Bridge 2 er PCI Bridge -enhetene. D1, d2, d3, etc., er PCI -endepunktenhetene til systemet. D3 er til stede på buss nr. 2 og buss nr. 3, den samme enheten på forskjellige busser.

PCI -konfigurasjonsplass eller topptekst:

Alle PCI -enhetene har konfigurasjonsplassen eller overskriften. Dette er standard minneområde som er til stede i alle enhetene. Det er to typer PCI -konfigurasjonsoverskrift, basert på de to typene (bro og endepunkt) av PCI -enheter. Konfigurasjonsplass er kjent som type 0 for endepunktenhet og type 1 for PCI -broer. Felt i konfigurasjonshodet er definert PCI -spesifikasjoner.

Type 0 Konfigurasjonshode:

Type 1 Konfigurasjonsoverskrift:

PCI bussoppregning:

Under oppstart av systemet er det å gjenkjenne alle PCI-enhetene i systemet og er kjent som PCI-bussopprinnningen. BIOS oppregner vanligvis alle PCI -enhetene som er til stede på alle bussene og befolker dem til SYSFS. Brukere kan få tilgang til detaljene om PCI -enheter som er til stede ved hjelp av LSPCI -verktøyet. En annen måte er å bla gjennom SYSFS -filene inne i /sys/buss/pci/enheter katalog. Denne katalogen vil ha alle enhetene til stede og kjent for Linux -kjernen.

Etter PCI -bussoppgaven får alle enhetene nummer, nummer og funksjonsnummer. Disse tre komponentene er nok til å finne en hvilken som helst enhet.

PCI Bus -oppregning utføres av BIOS (Basic Input Output System). BIOS er en firmwareprogramvare som er spesifikk for maskinen/plattformen og levert av produsenten selv.

Linux Kernel Root Complex Driver:

På hvilken som helst X86 -basert Linux -plattform er det et rotkompleks PCI -driver eller Linux PCI -undersystem som leser informasjonen som er befolket av BIOS og eksporterer informasjonen til SYSFS -filsystemet. Alle PCI -enhetene som er til stede i systemet, finner du inne i /sys/buss/pci/enheter katalog. Root Complex -driveren gir også fleksibiliteten til å gjenopprette eller tilbakestille enhetene på hvilken som helst PCI -buss. Selv full omforming av alle PCI -bussene kan gjøres gjennom/SYS/BUS/PCI/RESCAN.

Kommando for å skanne alle enhetene:

Echo 1>/sys/buss/pci/rescan

Brukere skal ha superbrukerrettigheter for å gi denne kommandoen.

For alle enheter i SYSFS -katalogen kan vi finne nedenfor detaljer/informasjon:

Sushil-Machine $ LS/SYS/BUS/PCI/DEVICES/0000 \: 00 \: 00.0/ -l
Totalt 0
-RW-R-R-- 1 ROOT ROOT 4096 4. oktober 17:34 Broken_parity_status
-R-R-R-- 1 Rotrot 4096 2. oktober 18:19 Klasse
-RW-R-R-- 1 ROOT ROOT 4096 2. oktober 18:19 Config
-R-R-R-- 1 ROOT ROOT 4096 4. oktober 17:34 Consistent_DMA_MASK_BITS
-RW-R-R-- 1 ROOT ROOT 4096 4. oktober 17:34 D3COLD_LOWED
-R-R-R-- 1 Rotrot 4096 2. oktober 18:19 enhet
-R-R-R-- 1 Rotrot 4096 4. oktober 17:34 DMA_MASK_BITS
LRWXRWXRWX 1 ROOT ROOT 0 2 OKTER 2 19:18 DRIVER ->… /… /… /BUS /PCI /DRIVERS /AGPGART -INTEL
-RW-R-R-- 1 ROOT ROOT 4096 4. oktober 17:34 Driver_Override
-RW-R-R-- 1 Rotrot 4096 4. oktober 17:34 Aktiver
-R-R-R-- 1 Rotrot 4096 2. oktober 18:19 IRQ
-R-R-R-- 1 Rotrot 4096 4. oktober 17:34 Lokal_cpulist
-R-R-R-- 1 Rotrot 4096 4. oktober 17:34 Local_CPUS
-R-R-R-- 1 Rotrot 4096 2. oktober 19:18 Modalias
-RW-R-R-- 1 ROOT ROOT 4096 4. oktober 17:34 MSI_BUS
-RW-R-R-- 1 ROOT ROOT 4096 2. oktober 19:18 NUMA_NODE
DRWXR-XR-X 2 ROOT ROOT 0 4 OKT
--W-W ---- 1 rotrot 4096 4. oktober 17:34 Fjern
--W-W ---- 1 Rotrot 4096 4. oktober 17:34 Rescan
-R-R-R-- 1 Rotrot 4096 2. oktober 18:19 Ressurs
-R-R-R-- 1 Rotrot 4096 4. oktober 17:34 Revisjon
LRWXRWXRWX 1 ROOT ROOT 0 4. OKTE 17:34 SUBSYSTEM ->… /… /… /BUS /PCI
-R-R-R-- 1 Rotrot 4096 4. oktober 17:34 SUBSYSTEM_DEVICE
-R-R-R-- 1 Rotrot 4096 4. oktober 17:34 SUBSYSTEM_VENDOR
-RW-R-R-- 1 ROOT ROOT 4096 4. oktober 17:34 UEVENT
-R-R-R-- 1 Rotrot 4096 2. oktober 18:19 Leverandør
Sushil-Machine $

Over er filene som er til stede for hver enhet på en annen vei.

Vi vil lese innholdet i få filer for å bekrefte informasjonen:

Sushil-Machine $ CAT/SYS/BUS/PCI/DEVICES/0000 \: 00 \: 00.0/enhet
0x7190 // Enhetsfilen gir enhetsID
Sushil-Machine $ CAT/SYS/BUS/PCI/DEVICES/0000 \: 00 \: 00.0/leverandør
0x8086 // leverandørfilen gir leverandøren
Sushil-Machine $

Tilsvarende gir andre filer litt annen informasjon.

Noen filer er bare skrivefiler: Fjern og Rescan

fjerne Filer kan brukes til å fjerne enheten. Ekko 1 til filen, og du vil se at LSPCI ikke vil vise denne enheten.

Echo 1>/sys/buss/pci/enheter/0000 \: 00 \: 00.0/Fjern

Gjenoppretting av enheten fra forrige trinn kan gjøres ved å ombestemme enheten.

Ekko 1 til Resclan Fil med kommandoen nedenfor:

Echo 1>/sys/buss/pci/enheter/0000 \: 00 \: 00.0/Resclan

Lesing og skriving til konfigurasjonsrommet:

LSPCI- og SETPCI -kommandoer er tilgjengelige, som kan brukes til å lese og skrive konfigurasjonsplassen til hvilken som helst PCI -enhet. LSPCI har veldig rike alternativer for å tilpasse utdataene i henhold til brukerens behov. SetPCI er et annet verktøy som også kan brukes til å få tilgang til konfigurasjonsplassen til PCI -enheten.

Vi vil ikke diskutere disse i detalj her, da det er en egen artikkel for å dekke begge disse verktøyene i detalj. Vi vil bare ha ett eksempel på begge kommandoene:

LSPCI:

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

setpci:

Sushil -Machine $ SetPCI -S 00:00.0 0.w
8086 // utgang; Lese et ord fra Offset 0 i konfigurasjonsrommet. Leverandør -IDen er utdataene.

Lesing og skriving av barområdet:

Det kan være totalt 6 32-biters bar eller 3 64-biters bar. Type 0 Konfigurasjonsplass kan refereres til for å få forskyvningsdetaljene i stangen.

La oss ta et eksempel på en enhet med utdataene nedenfor:

03:00.0 Ethernet -kontroller: VMware Vmxnet3 Ethernet -kontroller (Rev 01)
Subsystem: VMware VMXNET3 Ethernet Controller
Fysisk spor: 160
Kontroll: I/O+ MEM+ BUSMASTER+ SPECCYCLE- MEMWINV- VGASNOOP- Parerr- Stepping- Serr- Fastb2b- Disintx+
Status: Cap+ 66Mhz- Udf- Fastb2b- Parerr- Devsel = Fast> Tabort- -RW-R-R-- 1 ROOT ROOT 4096 4. oktober 18:01 Driver_Override
-RW-R-R-- 1 Rotrot 4096 4. oktober 18:01 Enable
LRWXRWXRWX 1 ROOT ROOT 0 4. OKTE 18:01 Firmware_Node ->…/…/…/LNXSYSTM: 00/LNXSYBUS: 00/PNP0A03: 00/enhet: 89/enhet: 8A
-R-R-R-- 1 Rotrot 4096 2. oktober 18:19 IRQ
-R-R-R-- 1 Rotrot 4096 4. oktober 17:57 Etikett
-R-R-R-- 1 Rotrot 4096 4. oktober 18:01 Lokal_cpulist
-R-R-R-- 1 Rotrot 4096 4. oktober 18:01 Local_CPUS
-R-R-R-- 1 ROOT ROOT 4096 4. oktober 18:01 MAX_LINK_SPEED
-R-R-R-- 1 Rotrot 4096 4. oktober 18:01 MAX_LINK_WIDTH
-R-R-R-- 1 Rotrot 4096 4. oktober 17:57 Modalias
-RW-R-R-- 1 ROOT ROOT 4096 4. oktober 18:01 MSI_BUS
DRWXR-XR-X 2 ROOT ROOT 0 4 OKTE 18:01 MSI_IRQS
DRWXR-XR-X 3 ROOT ROOT 0 JUL 22 06:53 NET
-RW-R-R-- 1 ROOT ROOT 4096 4. oktober 17:57 NUMA_NODE
DRWXR-XR-X 2 ROOT ROOT 0 4 OKT
--W-W ---- 1 Rotrot 4096 4. oktober 18:01 Fjern
--W-W ---- 1 Rotrot 4096 4. oktober 18:01 Rescan
--W ------- 1 ROOT ROOT 4096 4. oktober 18:01 Tilbakestill
-R-R-R-- 1 Rotrot 4096 2. oktober 18:19 Ressurs
-RW ------- 1 ROOT ROOT 4096 4. oktober 18:01 Resource0
-RW ------- 1 ROOT ROOT 4096 4. oktober 18:01 Resource1
-RW ------- 1 ROOT ROOT 8192 4. oktober 18:01 Resource2
-RW ------- 1 rotrot 16. oktober 18:01 ressur3
-R-R-R-- 1 Rotrot 4096 4. oktober 18:01 Revisjon
-RW ------- 1 ROOT ROOT 65536 4. oktober 18:01 ROM
LRWXRWXRWX 1 ROOT ROOT 0 4 OKTER 18:01 SUBSYSTEM ->… /… /… /… /BUS /PCI
-R-R-R-- 1 ROOT ROOT 4096 4. oktober 18:01 SUBSYSTEM_DEVICE
-R-R-R-- 1 Rotrot 4096 4. oktober 18:01 SUBSYSTEM_VENDOR
-RW-R-R-- 1 ROOT ROOT 4096 4. oktober 18:01 UEVENT
-R-R-R-- 1 Rotrot 4096 2. oktober 18:19 Leverandør
Sushil-Machine $

Ytterligere filer med navn ressurs [0-3] er til stede; Dette er filene som kan brukes til å få tilgang til minnet som er kartlagt til disse regionene. For eksempel, for å få tilgang til 4K -plassen som er kartlagt til region 0, kan Resource0 -filen for eksempel kartlegges til brukerområdet med MMAP () -funksjonen. Etter å ha kartlagt region0 til brukerområdet, kan du få tilgang til 4K -plassen i henhold til behovet/kravet.

Konklusjon:

Linux PCI -undersystem oppregner og befolker PCI -enhetene. LSPCI- og SETPCI -enheter kan brukes til å få informasjonen til enhetene. Root Complex Driver of Linux gir også alle PCI -enhetsinfo i SYSFS -filene. Det er en bestemmelse om å tilbakestille, redusere og fjerne enhetene fra SYSFS -filene. BIOS utfører oppregningsprosessen, og Linux -sjåføren analyserer informasjonen og fyller all enhetens informasjon deretter. Med så mye diskusjon, la oss avslutte dette emnet.