ioctl
a tendance à aller de pair avec une /dev
entrée; votre code typique ferait
fd=open("/dev/mydevice",O_RDRW);
ioctl(fd,.....);
C'est un comportement Unix parfaitement standard. À l'intérieur du pilote du noyau, vous pouvez placer des contrôles d'accès (par exemple, seuls root
certains peuvent faire certaines choses, ou nécessitent une capacité spécifique pour un accès plus fin), ce qui le rend assez flexible et puissant.
Bien sûr, cela signifie que les appareils peuvent exposer beaucoup plus que d'utiliser une activité de lecture / écriture de bloc / caractère; beaucoup de choses peuvent être faites via des ioctl
appels. Pas si facile à utiliser à partir de scripts shell, mais assez facile à partir C
ou perl
ou python
ou similaire.
sysfs
les entrées sont une autre façon d'interagir avec les pilotes. Typiquement, chaque type de commande aurait une entrée différente, donc il peut être compliqué d'écrire le pilote mais il est très facile d'accéder via l'espace utilisateur; les scripts shell simples peuvent manipuler beaucoup de choses, mais peuvent ne pas être très efficaces
netlink
est principalement concentré (je pense!) sur les transferts de données réseau, mais il pourrait être utilisé pour d'autres choses. C'est vraiment bon pour des volumes plus importants de transfert de données et est censé être un successeur ioctl
dans certains cas.
Toutes les options sont bonnes; votre cas d'utilisation peut mieux déterminer le type d'interface à exposer à partir de votre pilote.