Mappage des adresses physiques à l'adresse virtuelle linux
Je suis en train de travailler sur un petit système embarqué. Quand mon linux démarre dans l'espace utilisateur, je sais où sont mes appareils dans la mémoire physique. Je veux mapper dans l'espace utilisateur, les adresses virtuelles. Actuellement, je le fais par le biais d'un module du noyau. J'utilise vmalloc/kmalloc (selon la taille) puis-je utiliser ioremap_page_range sur qui a renvoyé les adresses virtuelles à la carte de mes adresses physiques. Je ne pense pas que c'est la bonne façon d'aller à ce sujet. Tout d'abord, je suis de l'allocation de mémoire et puis j'ai fais une demande de noyau pour remapper que l'espace d'adressage virtuel de quelques différentes adresse physique de l'espace. (D'abord cartographié physique->virtuel dans vmcall/kmalloc est un peu inutile comme je n'ai pas de soins sur ces pages physiques. Ce n'est certainement pas la bonne.)
Au lieu de cela, est-il une meilleure façon de carte de la physique connue de la mémoire dans le processus de l'espace utilisateur. (Je sais que d'autres que mon processus de l'espace utilisateur, personne ne va toucher que de la mémoire.)
Grâce
OriginalL'auteur agent.smith | 2012-07-23
Vous devez vous connecter pour publier un commentaire.
Ce que vous essayez de faire est d'accéder à ce qui est appelé IO mémoire. Je ne peux que vous encourager à lire le Linux Pilotes de Périphérique (LDD) livre et plus particulièrement le chapitre 9.
De "répartir" une telle zone, vous devez appeler
. Avant que votre pilote peut y accéder, vous devez attribuer une adresse virtuelle, c'est fait avec un appel à
Pour s'assurer que votre pilote va ensuite travailler sur différentes architectures/plates-formes, assurez-vous d'utiliser certaines fonction d'accès à ces zones ( ioread8/16/32 ou iowrite8/16/32 et toutes leurs variantes).
OriginalL'auteur Longfield
Dans le module du Noyau,
remap_pfn_range()
peut être utilisé pour convertir l'adresse physique d'adressage virtuel. Le lien suivant vous seront utiles.Comment remap_pfn_range adresse de la mémoire du noyau vers l'espace utilisateur?
OriginalL'auteur Jeyaram
Dans le module du Noyau, remap_pfn_range() peut être utilisé pour convertir l'adresse physique d'adressage virtuel. Lorsque vous n'avez pas de périphériques, vous pouvez:
1) créer un périphérique virtuel et,
2) utiliser mmap à ceux des périphériques virtuels pour accéder à la même mémoire du noyau à travers remap_pfn_range virtuel de la cartographie des processus.
3) Généralement dans des environnements de vous peut plus à épingler ces pages physiques de peur qu'ils sont emmenés à partir de votre processus.
4) Vous aussi partager ces adresses physiques avec des procédés différents, mais aura besoin de gérer la synchronisation, de façon indépendante par le biais d'autres mécanismes IPC comme à chaque processus, ils apparaîtront comme des adresses différentes.
OriginalL'auteur Divyank Shukla