GPIO accès depuis l'espace noyau
Après la tentative d'écriture d'un simple char de pilote de périphérique à présent, je veux écrire un char de pilote de périphérique pour accéder aux broches GPIO sur un linux embarqué conseil comme une Beagleboard. Je suis intéressé par l'écriture d'un module "mygpiomodule"
qui, lorsqu'il est chargé doit apparaître dans /dev/mygpiomodule
tels que lire, écrire à partir de l'espace utilisateur accède au GPIO. Je ne souhaite pas accès GPIO depuis l'espace utilisateur. Je veux le faire comme de ma première tentative vers l'écriture d'un module qui peut interagir avec certains périphériques. Je veux coller des diodes dans le port, et de tenter de les activer ou les désactiver.
Comment dois-je essayer de faire ceci?
Grâce
Mir
OriginalL'auteur Mir | 2012-01-12
Vous devez vous connecter pour publier un commentaire.
Heureusement écrire des pilotes pour Linux n'est pas trop compliqué, bien qu'un peu plus que ce qui peut être enseigné au sein de ce forum. Cependant, les bonnes nouvelles sont qu'il ya beaucoup de sources disponibles sur le web qui fait un très bon travail en expliquant exactement ce que vous êtes désireux de le faire. Voici quelques-unes que j'ai utilisé (même pour faire GPIO/LED de contrôle de pilotes), et ils fournissent le code source qui fonctionne et peut être utilisé comme une base pour votre pilote.
Logiciel gratuit article de Magazine
Projet de Documentation Linux article
O'Reilly Pilotes Linux livre
Linux Journal article
Le très "TinkerToy" la nature de Linux offre une grande flexibilité. Par exemple, vous pourriez envisager d'avoir votre permis de joindre à "/proc" système de fichiers (en utilisant create_proc_entry() de l'API), de cette façon, vous pouvez accéder à votre pilote sans avoir à écrire une application dédiée par "echo YOURSTRING > /proc/mygpiomodule" cordes à votre chauffeur. Pour lire à partir du pilote serait d'utiliser "cat /proc/mygpiomodule". Les liens ci-dessus comprennent également des exemples sur la façon de procéder ainsi. Cela peut aider à tester, et l'accès à votre pilote via des scripts de démarrage si vous avez besoin de le faire.
Prendre le temps de lire les articles et livres que j'ai énumérés ci-dessus, et certainement Google pour plus si vous en avez besoin. Allez-y plonger, et de les compiler et de l'exécuter certains des exemples, et vous allez arriver à la vitesse plutôt rapidement.
OriginalL'auteur davroslyrad
Noyau Linux permet de "jouer" avec les GPIOs facilement.
Il y a un fichier include pour travailler avec les GPIOs:
GPIOs doivent être alloués à l'avant de l'utiliser, même si la mise en œuvre actuelle ne respecte pas cette exigence. L'allocation de base de la fonction est:
Le gpio paramètre indique le GPIO est nécessaire, tandis que l'étiquette associe une chaîne de caractères qui peut par la suite apparaissent dans sysfs. La convention s'applique: un zéro code de retour indique le succès; sinon, la valeur de retour sera négatif d'un numéro d'erreur. Un GPIO peut être renvoyé dans le système avec:
Certains GPIOs sont utilisées pour la sortie, d'autres pour l'entrée. Un appareil filaire GPIO peut être utilisé en mode, bien que d'une seule direction est active à un moment donné. Code du noyau doit informer le GPIO de base de la façon dont une ligne doit être utilisé; ce qui est fait avec ces fonctions:
Dans les deux cas, gpio est le GPIO nombre. Dans le cas de sortie, la valeur de la GPIO (zéro ou un) doit également être spécifié; le GPIO sera fixé en conséquence dans le cadre de l'appel. Pour les deux fonctions, la valeur de retour est de nouveau le zéro ou négatif d'un numéro d'erreur. La direction de (convenablement capable) GPIOs peut être modifié à tout moment.
Pour l'entrée GPIOs, la valeur actuelle peut être lue avec:
Cette fonction retourne la valeur de la condition gpio; il n'a aucune disposition pour retourner un code d'erreur. Il est supposé (correctement dans presque tous les cas) que toute erreur sera trouvé quand gpio_direction_input() est appelée, pour la vérification de la valeur de retour de cette fonction est importante.
Réglage de la valeur de la production GPIOs peut toujours être effectué à l'aide de gpio_direction_output(), mais, si le GPIO est connu pour être en mode sortie déjà, gpio_set_value() peut-être un peu plus efficace:
Pour plus d'informations, consultez ce lien: entrez description du lien ici
OriginalL'auteur omotto
Si vous souhaitez passer un peu de GPIO bits à partir d'un pilote du noyau, alors vous ne voulez probablement pas à utiliser le gpio_xxx Api que l'utilisateur 'omotto" mentionné, parce que c'est destiné principalement à permettre à d'autres de pilote pour accéder aux GPIOs par nom, ainsi que de fournir un accès à l'espace utilisateur. Le quick-and-dirty solution de davroslyrad serait plus approprié pour vous.
OriginalL'auteur Timur Tabi