Utilitaires PCI à Linux

Utilitaires PCI à Linux

PCI signifie Interconnect des composants périphériques, est un protocole utilisé pour connecter les périphériques (DDR, UART, USB, etc.) avec le système CPU sur les ordinateurs ou les postes de travail du début. C'était le protocole défini par Intel pour son propre développement d'architecture. Dans l'heure actuelle, PCI est toujours utilisé comme bus système sur les PC ou les postes de travail basés sur l'architecture Intel.

En écriture, nous passerons par des commandes utiles que l'utilisateur peut exécuter pour explorer PCI sur les systèmes Linux. LSPCI et SETPCI sont des commandes principalement utilisées dans la communauté Linux PCI. Nous discuterons de quelques exemples et des cas d'utilisation de ces commandes.

Avant de commencer par les commandes, explorons peu sur les systèmes PCI basés sur Linux. En règle générale, un système Linux se compose de composants matériels et logiciels. La partie matérielle sera basée sur une architecture, disons x86. X86 est l'architecture définie par Intel. Il y a plusieurs périphériques dans le matériel: CPU, DDR, USB et UART pour n'en nommer que quelques-uns. Ce sont tous les composants matériels nécessaires à un protocole pour communiquer. C'est là que PCI vient jouer. PCI est l'ensemble des règles / directives que tous les composants doivent suivre pour communiquer entre eux.

Maintenant, tous les composants matériels sont connectés avec l'ICP, mais cela ne suffit pas. Le système n'est toujours pas complet et ne peut pas être utilisé. Une pièce importante est manquante, je.e. Logiciel. Le composant logiciel aura le BIOS, le chargeur de démarrage et le système d'exploitation. Tous ces composants doivent être installés sur le matériel.

Les composants logiciels auront le logiciel nécessaire pour initialiser PCI et activer les commandes de l'utilisateur. Une fois le système d'exploitation installé sur le système, les commandes LSPCI et SETPCI seront disponibles.

Prenons un exemple d'Ubuntu, qui est la distribution du système d'exploitation basé sur Linux. Une fois l'ubuntu installé sur le matériel basé sur X86, les commandes LSPCI et SETPCI doivent être disponibles par défaut. Les ordinateurs personnels sont des systèmes basés sur x86. Si Ubuntu est installé sur eux, alors ce sont les systèmes dont nous discuterons.

Ouvrez le terminal sur Ubuntu et exécutez la commande LSPCI. Nous verrons la sortie ci-dessous:

Dans l'image ci-dessus, la commande a fourni tous les détails des périphériques PCI du système. Cela donne la liste complète des appareils PCI sur ce système.

Pour fournir quelques détails sur les différents types de périphériques PCI, il existe 3 types de périphériques PCI: i) complexe racine ii) Dispositif de terminaison III) Ponts PCI.

Complexe racine

Ceci est le port racine pour tout système PCI. Tous les dispositifs et ponts de point final sont connectés au complexe racine ou au port racine.

Point final

Ce sont les appareils qui fournissent un cas d'utilisation ou une fonction d'utilisation. Par exemple, la carte graphique ou la carte réseau qui est branchée sur la fente PCI sur la carte mère, entre dans la catégorie des appareils de point de terminaison. Chaque dispositif de point de terminaison peut avoir plusieurs fonctions associées à l'appareil. Les fonctions maximales prises en charge par le point final peuvent être 8. Tout dispositif de point de terminaison peut avoir le nombre de fonctions de 1 à 8, l'indexation commence à 0 et va à 78.

Des ponts

Ce sont les appareils qui connectent différents bus PCI ensemble. Supposons que dans le système, si plusieurs bus sont présents, ces multiples bus seront connectés aux appareils de pont.

Dans n'importe quel système PCI, il y aura généralement 1 port racine ou périphérique complexe racine et il peut y avoir plusieurs ponts et périphériques de point de terminaison.

listes de commandes LSPCI Tous les dispositifs et ponts de point de terminaison sur le pont portuaire racine I.e. Complexe racine. Généralement, le numéro de bus attribué à ceci est 0. Le bus 0 est le bus complexe racine et le bus primaire du système. En bus unique, il peut y avoir 256 appareils et chaque appareil peut avoir un maximum de 8 fonctions. Ce (numéro de bus [b], numéro de périphérique [d] et numéro de fonction [f]) ​​est communément appelé la combinaison BDF dans le monde PCI. La combinaison BDF est suffisante pour localiser tout appareil spécifique dans le système PCI. L'attribution de ces BDF est effectuée par le BIOS dans le processus connu sous le nom d'énumération de bus PCI. L'énumération du bus PCI est effectuée par BIOS et BIOS scanne tout le numéro de bus, le numéro de l'appareil et le numéro de fonction à tous les appareils et les remplir. LSPCI est l'utilitaire qui vide ces informations énumérées dans l'espace utilisateur comme demandé par l'utilisateur en exécutant la commande LSPCI.

Dans l'instantané, il y a plusieurs appareils répertoriés par LSPCI. Prenons un exemple de ligne pour comprendre la sortie fournie par LSPCI:

Dans cette sortie, nous pouvons voir les premières entrées comme 00:00.0.

Le premier 00 représente le numéro de bus. Cela fournit les détails sur le numéro de bus sur lequel cet appareil est connecté. Deuxième 00 après le côlon, représente le numéro de périphérique. Dernier chiffre après . [DOT], représente le numéro de fonction.

Oui, c'est le même BDF dont nous avons discuté précédemment.

D'autres informations sur les chaînes fournissent quelques détails sur l'appareil. Ceci est la brève description de l'appareil. Comme l'exemple la sortie indique qu'il s'agit du pont hôte et fournit également les informations du fabricant.

Toutes les valeurs de cet exemple sont 0, cela ne signifie pas que ce sera toujours 0. Prenons un autre exemple avec des valeurs différentes:

Dans cet exemple, nous pouvons voir le numéro de bus comme 2 pour le contrôleur SATA et 3 pour le dispositif de contrôleur Ethernet. Les numéros de périphérique sont 01 pour le contrôleur SATA et 00 pour le contrôleur Ethernet. Les deux appareils ont le numéro de fonction comme 0.

Après le BDF, il y a la description du périphérique PCI.

Jusqu'à présent, nous avons discuté de la sortie par défaut de la commande i.e. Exécuter uniquement la commande LSPCI. Cette commande a également des options qui peuvent être transmises à la commande pour fournir plus de détails sur l'appareil. Si une certaine formatage de la sortie est requise, il existe également des options. Explorons une option de la commande. La liste complète des options peut être vue sur la page de l'homme de la commande. Juste pour se familiariser avec les options les plus couramment utilisées, prenons quelques exemples.

Pour répertorier l'ID de l'appareil et du fournisseur des périphériques PCI, l'option -nnn peut être utilisée.

L'ID du vendeur et l'ID de périphérique sont alloués par PCI SIG Group. PCI SIG est le groupe qui fonctionne pour le développement des normes de PCI et ses améliorations. Ils définissent les améliorations et les nouvelles versions du PCI pour correspondre aux développements technologiques du système.

Dans l'exemple de sortie, nous pouvons voir [Xxxx: xxxx], dans toutes les lignes. Les 4 premiers chiffres sont l'ID du fournisseur et 4 chiffres après le colon ID de l'appareil. Pour la première sortie, l'ID du fournisseur est 8086, qui est l'ID du fournisseur alloué à Intel. Deuxième 4 chiffres après Colon I.e. 7190 est l'ID de l'appareil.

Si nous souhaitons répertorier le périphérique en fonction d'un ID de périphérique particulier, l'option LSPCI avec -D peut être utilisée.

lspci -d: 7190, La commande fournira les informations de l'appareil avec l'ID de périphérique 7190. La commande n'a fourni que les informations sur un seul appareil.

L'exemple de sortie est le suivant:

Si BDF est connu de n'importe quel appareil, LSPCI peut être utilisé pour obtenir les informations de l'appareil spécifique. Restuons au même exemple de BDF que 00:00.L'option 0, -s offre la capacité de récupérer les informations de l'appareil.

lspci -s 00:00.0, Fournit les informations sur l'appareil qui est connecté au numéro de bus 0 et à l'appareil et la fonction de l'appareil est 0.

Options LSPCI -VVV Fournit les informations verbeuses de l'appareil. Il lit l'espace de configuration de l'appareil et imprime les informations de l'appareil dans le format détaillé. Cette option peut être utilisée en combinaison d'option -d ou -s. L'utilisation combinée de -s ou -d et -vvv fournira les détails sur l'appareil spécifique.

Les exemples de sorties sont les suivants:

lspci -vvv -s 00:00.0
lspci -vvv -d: 7190

-Option x Fournit les détails de l'espace de configuration de l'appareil au format hexadécimal.

Option LSPCI -VT peut être utilisé pour fournir l'arbre comme la sortie des appareils PCI. Voici la sortie que j'ai dans mon système:

Commande setpci dans Linux fournit également quelques moyens d'accéder / modifier l'espace de configuration des périphériques PCI. Pour obtenir l'ID du fournisseur du périphérique PCI, nous pouvons utiliser la commande comme; setpci -s 00:00.0 0.w

La commande imprimera le mot i.e. 2 octets du décalage 0 du BDF en 00:00.0. Nous devrions obtenir la sortie en 8086.

Reference de l'appareil Les 2 octets sont-ils présents au décalage 2 après l'ID du fournisseur. Pour obtenir l'ID de périphérique, la commande doit être SETPCI -S 00:00.0 2.w

La commande setpci peut être utilisée pour modifier le contenu de l'espace de configuration. Seul la pré-requis pour cela est que le champ de configuration devrait être en train d'écrire capable. Certains des appareils ont par défaut le maître de bus désactivé. Pour activer la maîtrise du bus, la valeur de décalage de 2 doit être écrite. Pour activer la maîtrise en bus de tout appareil, la commande qui peut être utilisée est:

setpci -s 00:01.0 4.w = 2 ; Cette commande permettra le mastering de bus et donc la région de mémoire de barre est accessible.

Conclusion

Nous avons discuté de la commande LSPCI la plus populaire de Linux et de ses options couramment utilisées. Nous avons touché une base sur quelques bases de concepts PCI comme le BDF, les types de périphériques PCI, etc. Nous avons également discuté d'un système PCI typique avec quelques exemples. Nous avons vécu quelques exemples d'échantillons et utilisation de la commande LSPCI. Nous avons vu un peu sur Setpci et quelques exemples d'utilisation de Setpci. Avec toute cette discussion, concluons sur ce sujet.