La figure ci-dessus montre le système PCI, qui a 3 bus PCI. Le bus no 0 est le bus principal du système car le CPU est connecté à ce bus; De plus, c'est le bus où le pont portuaire racine ou le complexe racine est présent.
Autres bus, je.e., Les bus n ° 1 et 2 sont connectés au bus primaire à l'aide de ponts PCI. Le bus no 1 est connecté au bus no 0 avec le pont 1. Le bus n ° 2 est connecté au bus n ° 1 avec le pont n ° 2. Dans l'ensemble, tous les appareils sont connectés et plusieurs appareils D1, D2, D3, etc., sont présents sur différents bus PCI. Sur n'importe quel système PCI, 3 types d'appareils sont présents. Port racine ou périphérique complexe, périphérique de pont et dispositifs de point de terminaison. Comparaison des types de dispositifs avec notre exemple de diagramme, le processeur est le port racine ou l'appareil complexe. Le pont 1, le pont 2 sont les dispositifs de pont PCI. D1, d2, d3, etc., sont les dispositifs de point de terminaison PCI du système. D3 est présent sur le bus n ° 2 et le bus n ° 3, le même appareil sur différents bus.
Espace de configuration PCI ou en-tête:
Tous les périphériques PCI ont l'espace de configuration ou l'en-tête. C'est la zone de mémoire standard présente dans tous les appareils. Il existe deux types d'en-tête de configuration PCI, basé sur les deux types (pont et point final) des appareils PCI. L'espace de configuration est connu sous le nom de type 0 pour le périphérique de point de terminaison et de type 1 pour les ponts PCI. Les champs de l'en-tête de configuration sont des spécifications PCI définies.
En-tête de configuration de type 0:
En-tête de configuration de type 1:
Énumération du bus PCI:
Pendant le démarrage du système, la reconnaissance de tous les périphériques PCI du système est effectuée et est connue sous le nom d'énumération du bus PCI. Le BIOS énumère généralement tous les périphériques PCI présents sur tous les bus et les remplissent vers le SYSFS. Les utilisateurs peuvent accéder aux détails des appareils PCI présents à l'aide de l'utilitaire LSPCI. Une autre façon consiste à parcourir les fichiers sysfs à l'intérieur du / sys / bus / pCI / appareils annuaire. Ce répertoire aura tous les appareils présents et connus du noyau Linux.
Après l'énumération du bus PCI, tous les appareils obtiennent le numéro, le numéro et le numéro de fonction. Ces trois composants sont suffisants pour localiser n'importe quel appareil.
L'énumération du bus PCI est effectuée par le BIOS (système de sortie d'entrée de base). BIOS est un logiciel de firmware spécifique à la machine / plate-forme et fourni par le fabricant lui-même.
Pilote complexe de racine du noyau Linux:
Sur n'importe quelle plate-forme Linux basée sur X86, il existe un pilote PCI complexe racine ou un sous-système Linux PCI qui lit les informations remplies de BIOS et exporte les informations vers le système de fichiers SYSFS. Tous les appareils PCI présents dans le système se trouvent à l'intérieur du / sys / bus / pCI / appareils annuaire. Root Complex Driver offre également la flexibilité de sauver ou de réinitialiser les appareils sur n'importe quel bus PCI. Même le annulation complet de tous les bus PCI peut être effectué via / SYS / BUS / PCI / RESCAN.
Commande pour annuler tous les appareils:
Echo 1> / SYS / BUS / PCI / RESCAN
Les utilisateurs devraient avoir des droits de superutilisateurs pour publier cette commande.
Pour tout appareil du répertoire SYSFS, nous pouvons trouver ci-dessous les détails / informations:
SUSHIL-MACHINE $ LS / SYS / BUS / PCI / DÉPIRES / 0000 \: 00 \: 00.0 / -l
total 0
-rw-r - r-- 1 racine racine 4096 oct 4 17:34 Broken_parity_status
-r - r - r-- 1 racine racine 4096 2 oct. 18:19 Classe
-rw-r - r-- 1 racine racine 4096 2 oct
-r - r - r-- 1 racine racine 4096 oct 4 17:34 cohérent_dma_mask_bits
-rw-r - r-- 1 racine racine 4096 oct 4 17:34 d3cold_allowed
-r - r - r-- 1 racine racine 4096 2 oct. 18:19 Device
-r - r - r-- 1 racine racine 4096 oct 4 17:34 dma_mask_bits
lrwxrwxrwx 1 racine racine 0 oct 2 19:18 pilote ->… /… /… / bus / pci / pilotes / agpgart-intel
-RW-R - R-- 1 Root Root 4096 Oct 4 17:34 Driver_override
-rw-r - r-- 1 racine racine 4096 oct 4 17:34 Activer
-r - r - r-- 1 racine racine 4096 2 oct. 18:19 Irq
-r - r - r-- 1 racine racine 4096 oct 4 17:34 local_cpulist
-r - r - r-- 1 racine racine 4096 oct 4 17:34 local_cpus
-r - r - r-- 1 racine racine 4096 2 octobre 19:18 modalias
-RW-R - r-- 1 Root Root 4096 Oct 4 17:34 MSI_BUS
-rw-r - r-- 1 racine racine 4096 2 octobre 19:18 numa_node
DRWXR-XR-X 2 racine de racine 0 oct. 4 17:34 Power
--W - W ---- 1 racine racine 4096 oct 4 17:34 Retirer
--W - W ---- 1 Root Root 4096 4 octobre 17:34 RESCAN
-r - r - r-- 1 racine racine 4096 2 oct. 18:19 Ressource
-r - r - r-- 1 racine racine 4096 oct 4 17:34 révision
lrwxrwxrwx 1 racine racine 0 oct 4 17:34 Sous-système ->… /… /… / bus / pci
-r - r - r-- 1 racine racine 4096 oct 4 17:34 SubSystem_device
-r - r - r-- 1 racine racine 4096 oct 4 17:34 SubSystem_Vendor
-rw-r - r-- 1 racine racine 4096 4 oct. 17:34 uevent
-r - r - r-- 1 racine racine 4096 2 oct. 18:19 vendeur
Sushil-Machine $
Ci-dessus sont les fichiers présents pour chaque appareil à un chemin différent.
Nous lirons le contenu de quelques fichiers pour vérifier les informations:
SUSHIL-MACHINE $ CAT / SYS / BUS / PCI / DÉPIRES / 0000 \: 00 \: 00.0 / appareil
0x7190 // Le fichier de périphérique fournit le périphérique
SUSHIL-MACHINE $ CAT / SYS / BUS / PCI / DÉPIRES / 0000 \: 00 \: 00.0 / vendeur
0x8086 // Le fichier du vendeur fournit le vendeur
Sushil-Machine $
De même, d'autres fichiers fournissent d'autres informations.
Certains fichiers sont des fichiers en écriture: supprimer et sauver
retirer Les fichiers peuvent être utilisés pour supprimer l'appareil. Echo 1 dans le fichier, et vous verrez LSPCI ne montrera pas cet appareil.
Echo 1> / SYS / BUS / PCI / DÉPIRES / 0000 \: 00 \: 00.0 / Supprimer
La récupération de l'appareil à partir de l'étape précédente peut être effectuée en réalisant l'appareil.
Écho 1 au sauver Fichier avec la commande ci-dessous:
Echo 1> / SYS / BUS / PCI / DÉPIRES / 0000 \: 00 \: 00.0 / RESCAN
Lecture et écriture dans l'espace de configuration:
Des commandes LSPCI et SETPCI sont disponibles, qui peuvent être utilisées pour lire et écrire l'espace de configuration de n'importe quel périphérique PCI. LSPCI a des options très riches pour personnaliser la sortie selon les besoins de l'utilisateur. SetPCI est un autre utilitaire qui peut également être utilisé pour accéder à l'espace de configuration du périphérique PCI.
Nous n'en discuterons pas en détail ici car il existe un article distinct pour couvrir ces deux services publics en détail. Nous n'aurons qu'un exemple des deux commandes:
lspci:
SUSHIL-MACHINE $ LSPCI -D: 7190
00:00.0 Bridge hôte: Intel Corporation 440BX / ZX / DX - 82443BX / ZX / DX HOST BRIDGE (REV 01) //
setpci:
SUSHIL-MACHINE $ SETPCI -S 00:00.0 0.w
8086 // Sortie; Lire un mot de Offset 0 dans l'espace de configuration. L'ID du fournisseur est la sortie.
Lecture et écriture de l'espace de bar:
Il peut y avoir un total de 6 barres de 32 bits ou 3 bar 64 bits. L'espace de configuration de type 0 peut être renvoyé pour obtenir les détails de décalage de la barre.
Prenons un exemple d'un appareil avec la sortie ci-dessous:
03h00.0 Contrôleur Ethernet: VMware VMXNET3 Ethernet Controller (Rev 01)
Sous-système: VMware VMXNET3 Ethernet Controller
Emplacement physique: 160
CONTRÔLE: E / O + MEM + BUSMASTER + Speccycle- memwinv- VgasNoop- Parer- Stepping- Serr- FastB2B- DISINTX+
Statut: CAP + 66MHz- UDF- FASTB2B- Parerr- Devsel = FAST> TABORT--RW-R - r-- 1 racine racine 4096 4 oct. 18:01 Driver_override
-rw-r - r-- 1 racine racine 4096 4 oct. 18:01 Activer
lrwxrwxrwx 1 racine root 0 oct 4 18:01 firmware_node ->… /… /… / lnxSystm: 00 / lnxSybus: 00 / pnp0a03: 00 / périphérique: 89 / périphérique: 8a
-r - r - r-- 1 racine racine 4096 2 oct. 18:19 Irq
-r - r - r-- 1 racine racine 4096 oct 4 17:57 Étiquette
-r - r - r-- 1 racine racine 4096 4 oct. 18:01 local_cpulist
-r - r - r-- 1 racine racine 4096 4 oct. 18:01 local_cpus
-r - r - r-- 1 racine racine 4096 4 oct. 18:01 max_link_speed
-r - r - r-- 1 racine racine 4096 4 oct. 18:01 max_link_width
-r - r - r-- 1 racine racine 4096 oct 4 17:57 modalias
-RW-R - r-- 1 Root Root 4096 4 oct. 18:01 MSI_BUS
DRWXR-XR-X 2 racine racine 0 oct. 4 18:01 MSI_IRQS
drwxr-xr-x 3 racine racine 0 juil 22 06:53 Net
-rw-r - r-- 1 racine racine 4096 oct 4 17:57 numa_node
DRWXR-XR-X 2 racine racine 0 oct. 4 18:01 Power
--W - W ---- 1 racine racine 4096 4 oct. 18:01 Retirer
--W - W ---- 1 Root Root 4096 4 oct. 18:01 RESCAN
--W ------- 1 racine racine 4096 4 oct. 18:01 Réinitialiser
-r - r - r-- 1 racine racine 4096 2 oct. 18:19 Ressource
-RW ------- 1 racine racine 4096 4 oct. 18:01 Resource0
-RW ------- 1 racine racine 4096 4 oct. 18:01 Ressource1
-RW ------- 1 racine racine 8192 4 oct. 18:01 Resource2
-RW ------- 1 racine racine 16 oct 4 18:01 Ressource3
-r - r - r-- 1 racine racine 4096 4 oct. 18:01 révision
-RW ------- 1 racine racine 65536 4 oct. 18:01 Rom
lrwxrwxrwx 1 racine racine 0 oct 4 18:01 Sous-système ->… /… /… /… / bus / pci
-r - r - r-- 1 racine racine 4096 4 oct. 18:01 SubSystem_device
-r - r - r-- 1 racine racine 4096 4 oct. 18:01 SubSystem_Vendor
-rw-r - r-- 1 racine racine 4096 4 oct. 18:01 uevent
-r - r - r-- 1 racine racine 4096 2 oct. 18:19 vendeur
Sushil-Machine $
Des fichiers supplémentaires avec des noms de ressources [0-3] sont présents; Ce sont les fichiers qui peuvent être utilisés pour accéder à la mémoire mappée à ces régions. Par exemple, pour accéder à l'espace 4K mappé à la région 0, le fichier Resource0 peut être mappé sur l'espace utilisateur avec la fonction mmap (). Après avoir cartographié la région0 à l'espace utilisateur, l'espace 4K est accessible selon les besoins / exigences.
Conclusion:
Le sous-système Linux PCI énumère et remplit les appareils PCI. Les appareils LSPCI et SETPCI peuvent être utilisés pour obtenir les informations des appareils. Root Complex Driver de Linux fournit également toutes les informations de périphériques PCI dans les fichiers sysfs. Il y a une disposition pour réinitialiser, sauver et supprimer les appareils des fichiers sysfs. Le BIOS effectue le processus d'énumération, et le pilote Linux analyse les informations et remplit toutes les informations de l'appareil en conséquence. Avec autant de discussions, concluons ce sujet.