2010-06-12 5 views
6

J'apprends la programmation dans les systèmes embarqués en utilisant Linux comme plate-forme principale. Et je veux créer un service de gestion d'événements de périphérique. Ce service est une application/démon utilisateur-espace qui détectera si un module matériel connecté a déclenché un événement. Mais mon problème est que je ne sais pas par où commencer. J'ai lu à propos de l'implémentation Netlink pour la communication userspace-kernelspace et il semble que ce soit une bonne idée, mais je ne sais pas si c'est la meilleure solution. Mais j'ai lu que le gestionnaire de périphériques UDEV utilise Netlink pour attendre un "uevent" de l'espace noyau, mais il n'est pas clair pour moi comment faire cela.Communication Netlink espace-utilisateur et espace-noyau

Je lis à propos de l'interrogation de sysfs mais il semble que ce ne soit pas une bonne idée d'interroger le système de fichiers. À votre avis, quelle implémentation dois-je utiliser dans mon service? Devrais-je utiliser netlink (difficile/aucune idée de comment) ou juste interroger les sysfs (pas sûr si cela fonctionne)?

Merci

+0

Vous pouvez également nous informer d'être averti quand un répertoire en question dans sysfs change au lieu d'interroger. – MikeK

Répondre

1

Oui, l'interrogation est déconseillée. Ces ressources: l'article de LJ sur Netlink, "Comprendre et programmer avec Netlink Sockets", fait en sorte qu'il ne semble pas si difficile de faire netlink. Voici un exemple de socket netlink en python. Udevtrigger est un excellent utilitaire pour réagir aux changements d'udev.

http://www.linuxjournal.com/article/7356

http://smacked.org/docs/netlink.pdf

http://guichaz.free.fr/misc/iotop.py

http://manpages.ubuntu.com/manpages/gutsy/man8/udevtrigger.8.html

1

Si tout ce que vous faites est d'attendre un événement que vous pouvez utiliser sysfs, qui sera beaucoup plus simple que NetLink. Un exemple est le fichier Edge du système GPIO.