2017-09-05 8 views
0

En arrivant formulaire this question hier, j'ai décidé de porter this bibliothèque à mon conseil. J'étais conscient que j'avais besoin de changer quelque chose, alors j'ai compilé la bibliothèque, l'ai appelée sur un petit programme et j'ai vu ce qui se passait. Le 1er problème est ici:Où trouver l'arborescence des périphériques?

// Check for GPIO and peripheral addresses from device tree. 
    // Adapted from code in the RPi.GPIO library at: 
    // http://sourceforge.net/p/raspberry-gpio-python/ 
    FILE *fp = fopen("/proc/device-tree/soc/ranges", "rb"); 
    if (fp == NULL) { 
     return MMIO_ERROR_OFFSET; 
    } 

Cette lib vise à Rpi, os la structure du système sur mon conseil n'est pas la même chose. Donc je me demandais si quelqu'un pouvait me dire où je pourrais trouver ce fichier ou à quoi cela ressemble pour que je puisse le trouver par moi-même afin de continuer le travail.

Merci.

+0

Peut-être que vous pourriez télécharger un système d'exploitation Raspbian et regarder dans le fichier. – Julien

+0

* "où j'ai pu trouver ce fichier ..." * - Ce * "fichier" * n'existe que dans le système de fichiers spécial procfs, et ce sous-répertoire **/proc/device-tree/** est dérivé du périphérique du forum Blob d'arbre. Dans le code source DT, ** ** ** "fichier" * existe comme une seule ligne dans un fichier (par exemple ** arch/arm/boot/dts/bcm2835.dtsi **). Votre forum (que vous négligez de fournir des détails) n'utiliserait DT que s'il avait un SoC PPC ou ARM, et même alors, la structure de DT pourrait être différente de cet exemple de Broadcom. – sawdust

+0

Faire un tel pilote dans l'espace utilisateur ne semble pas la meilleure idée. – 0andriy

Répondre

0

Vous ne voulez pas nécessairement ce "fichier" (ou plus précisément/proc node).

Le code cela se trouve dans est la mise en place pour faire mémoire directe mappée E/S en utilisant ce qui semble être une version aromatisée GPIO spécifique-pi du type /dev/mem de pilote de périphérique pour exposer la fonction spéciale de matériel registres à espace utilisateur.

Pour mettre ceci sur votre carte, vous devez d'abord déterminer s'il y a une capacité /dev/mem ou similaire dans votre noyau que vous pouvez activer. Ensuite, vous devrez déterminer les registres d'E/S appropriés pour les broches GPIO. Le code spécifique à pi lit l'arborescence des périphériques pour le comprendre, mais il existe d'autres façons, par exemple, de lire manuellement le manuel du programmeur du SoC sur lequel vous travaillez.

Une autre approche que vous pouvez envisager est d'ajouter un petit microcontrôleur (ou oui, barebones *** duino) au système, et de l'utiliser pour collecter des informations provenant de divers capteurs et périphériques. Cela peut ensuite être transmis au SoC via un lien UART, ou interrogé via I2C ou similaire - ajouter un peu de coût et un certain degré de goulot d'étranglement, mais signifie également que le logiciel sur le SoC devient alors très portable - à un autre puce comparable, ou peut-être même à courir sur un PC de bureau au cours du développement.

+0

Je vois, donc je pourrais réellement utiliser le même code pi, mais en changeant les registres pour le Gpio, cela fonctionnerait pour mon appareil, non? – Lomezno

+0

Cela dépend des capacités de votre appareil, que vous avez plutôt bizarrement évité d'identifier. –