Quelle est l'Adresse de Base de Registre (BAR) en PCIe?
Après être passé par quelques notions de base les documents de ce que j'ai compris, c'est que, de la Base de Registre d'Adresse est l'Adresse de l'espace qui peut être consulté par le PCIe IP. PCIe IP peut soit transmettre des données dans la Base de Registre d'Adresse ou il peut écrire des données reçues.
Suis-je droit? Ou de manquer quelque chose?
OriginalL'auteur tollin jose | 2015-05-12
Vous devez vous connecter pour publier un commentaire.
Je pense que c'est une question très simple et je vous propose de lire:
Un Registre d'Adresses de Base (BAR) est utilisé pour:
- spécifier la quantité de mémoire un dispositif veut être mappé en mémoire principale, et
- après l'énumération des périphériques, il est titulaire de la (base) son adresse, où la mémoire mappée bloc commence.
Un appareil peut avoir jusqu'à six 32 bits de BARs ou de combiner les deux BARs, un 64-bit BAR.
D'une part, 2 BARs sont nécessaires pour 64 bits BARs (sinon ce n'est pas possible à la carte de l'appareil au-delà de la limite de 4 go), d'autre part penser à une configuration de BARRE et un échange de données de BAR ou de deux Barres de données sur l'entrée et un pour la sortie.
Je pense que ce dernier commentaire est tout aussi importante que la réponse. Envisager de déplacer en réponse segment. Les nouveaux arrivants en PCI peut manquer la section des commentaires, et rater cette info importante. +1 de moi.
Ainsi, la région de mémoire que la BARRE de cartes est à l'intérieur de périphérique PCIe(les données sont stockées dans la mémoire de l'appareil, non?)? Après la cartographie, logiciel(pilote) peuvent lire/écrire la mémoire de l'appareil par le biais de la mémoire mappée région?
Oui. Le contrôleur de mémoire dans le CPU, le PCIe Racine Complexe et le périphérique PCIe arbre directe de l'accès à la mémoire de l'appareil au lieu de la mémoire principale.
OriginalL'auteur Paebbels
Noyau Linux point de vue
Une bonne façon d'apprendre quelque chose est d'interagir avec elle, nous allons donc utiliser le noyau Linux.
Ici est un minimum PCI exemple sur un QEMU périphérique émulé: https://github.com/cirosantilli/linux-kernel-module-cheat/blob/366b1c1af269f56d6a7e6464f2862ba2bc368062/kernel_module/pci.c
Les 64 premiers octets de la configuration PCI sont standardisés:
Image de LDD3.
Nous pouvons voir qu'il y a 6 BARs. Le page wiki puis affiche le contenu de chaque BARRE:
Largeur de la région nécessite une magie de l'écriture cependant: Comment est une carte PCI /PCIe BARRE de taille déterminée?
Ce mémoire est l'installation par le périphérique PCI, et donne des informations sur le noyau.
Chaque BARRE correspond à une plage d'adresses qui sert de canal de communication distinct pour le périphérique PCI.
La longueur de chaque région est définie par le matériel, et communiquées au logiciel via des registres de configuration.
Chaque région possède également d'autres matériels de propriétés définies outre la longueur, notamment le type de mémoire:
IORESOURCE_IO
: doit être accessible avecinX
etoutX
IORESOURCE_MEM
: doit être accessible avecioreadX
etiowriteX
Plusieurs noyau Linux PCI prise de fonctions de la
BAR
en tant que paramètre pour identifier le canal de communication est de être utilisés, par exemple:Par la recherche dans le QEMU appareil code source, nous voyons que QEMU dispositifs d'enregistrement de ces régions avec:
et il est clair que les propriétés de la BARRE de matériel sont définis, par exemple le numéro de BAR
0
, a le type de mémoirePCI_BASE_ADDRESS_SPACE_MEMORY
, et la région de mémoire est 1MiB long1 << 20
.Voir aussi: http://wiki.osdev.org/PCI#Base_Address_Registers de cours.
OriginalL'auteur Ciro Santilli 新疆改造中心 六四事件 法轮功