Comment communiquer avec un module noyau Linux à partir de l'espace utilisateur sans jeter des déchets / dev avec de nouveaux nœuds?
Quels sont les moyens pour communiquer avec un module du noyau à partir de l'espace utilisateur? Par la communication, je veux dire l'envoi des commandes et des informations entre le module du noyau et espace utilisateur processus.
Actuellement, je sais de deux façon:
- ouvrir/fermer/lire/écrire/ioctl à la publication d'un nœud de périphérique.
- de lecture/écriture sur exportés et accro de fichiers /proc.
Plus précisément, quelqu'un peut-conseils le meilleur moyen de communiquer avec un module du noyau qui ne fait pas les lecteurs de tout matériel et, par conséquent, ne devrait pas être l'abandon de détritus /dev avec talon nœuds qui n'existe que pour les appels ioctl? J'ai surtout besoin de vérifier ses diverses variables de statut et envoyer un bloc de données avec une requête du type de balise et de voir si la requête a réussi.
source d'informationauteur Inso Reiges
Vous devez vous connecter pour publier un commentaire.
Sockets Netlink sont conçus pour ce type d'exigences, trop...
Voir aussi
Il y a aussi le système de fichiers /sys (sysfs):
(à partir de Wikipedia)
Vous pouvez également lire/écrire à partir de /dev nœuds de périphérique.
À mon humble avis, /dev est déjà jonché de trucs et en ajoutant vos propres noeuds, il n'est pas un gros problème. N'oubliez pas que vous pouvez avoir beaucoup de codes ioctl pour un seul nœud de périphérique, et l'ioctl paramètres sont passés par référence, donc peut être aussi grand que vous le souhaitez.
Troisième est d'ajouter une nouvelle syscall, mais les deux que vous avez écrit est la meilleure, je pense. J'ai trouvé ce document qui pourrait aider, mais je pense toujours que cette option est proscrite: http://www.csee.umbc.edu/courses/undergraduate/CMSC421/fall02/burt/projects/howto_add_systemcall.html
Une autre option acceptable pourrait être le partage de la mémoire.
Vous pouvez également utiliser De Mémoire Partagée et IOCTL
debugfs est une bonne possibilité pour les Api qui sont moins stables que sysfs, mais l'API est fondamentalement la même. Voici une minimum praticable exemple.
configfs en est une autre. Il permet la création dynamique d'objets du noyau à partir de l'espace utilisateur à travers le système de fichiers: https://www.kernel.org/doc/Documentation/filesystems/configfs/configfs.txt
Dans tous les cas, vous devrez sale certains espace de noms... un système de fichiers d'entrée en cas de sysfs et debugfs. Il suffit de choisir votre poison.
Aussi,
udev
les règles de/dev
très similaire à sysfs et debugfs: Comment créer un périphérique dans /dev automatiquement lors du chargement du module du noyau pour un pilote de périphérique?