Quelle est la différence entre les divers pilotes et des pilotes de char?
Je suis en train de lire à propos de divers pilotes sous Linux, et je suis un peu confus sur les différences entre eux et les pilotes de char. Une source, le Linux journal, écrit:
Alessandro nous dit comment enregistrer un petit appareil qui a besoin d'un seul
point d'entrée avec les divers pilote.Parfois les gens ont besoin d'écrire
“les petites” les pilotes de périphériques, de soutien personnalisé hacks—qu'il soit matériel ou
de logiciel. À cette fin, ainsi que d'accueillir des vrais pilotes, l'
Le noyau Linux exporte une interface pour permettre aux modules d'inscrire leurs
propres petits pilotes. Le misc pilote a été conçu à cet effet.
Ok, donc à partir de ce je que il y a un simple pilote (dans ce cas, avec un point d'entrée unique), c'est un misc pilote. Puis une autre source, l'Essentiel Linux Pilotes de Périphériques, les états:
Misc (ou divers) les pilotes sont de simples char pilotes qui partagent
certaines caractéristiques communes. Parce que les divers pilotes sont des pilotes de char,
la discussion antérieure sur le char, pilote de points d'entrée pour tenir divers
les pilotes, trop.
Maintenant, cela semble dire que les divers pilotes sont juste char pilotes, mais peut-être un sous-ensemble de fonctions, et des pilotes de char peut avoir plus d'un seul point d'entrée (comme un ioctl()
ou un open()
ou un read()
appel)
Alors, que, dans Linux C codage termes, sont les différences entre un char et divers-pilote de périphérique? (En outre l'évident majeur de l'attribution d'un numéro (10) pour tous les divers pilotes). Est-il une différence dans la prise en charge des points d'entrée? Est mon hypothèse correcte que les divers pilotes de périphérique seulement un sous-ensemble de ce que vous pouvez obtenir dans une pleine char pilote de périphérique?
OriginalL'auteur Mike | 2013-08-27
Vous devez vous connecter pour publier un commentaire.
Modifier: je pensais que vous parliez de
drivers/misc
pilotes, mais je vois que vous êtes en se référant à caractère pilotes à l'aide demisc_register
(et toutes les API dansdrivers/char/misc.c
). Vous devez le préciser dans votre question.Dans ce cas, le
misc
API semble rendre votre vie plus facile quand vous êtes en train de rédiger un petit caractère pilote et ne voulez pas nécessaire d'attribuer un nouveau numéro majeur uniquement l'utilisation d'un numéro mineur, par exemple. Il simplifie les choses, mais toutes les opérations sur les fichiers sont toujours disponibles à l'aide de lafops
membre destruct miscdevice
. La différence fondamentale est que vous obtenez seulement un petit nombre parmisc
appareil.Mon précédent, sans rapport avec la réponse a été, pour l'enregistrement:
Un rapide coup d'oeil à
drivers/misc
: vous ne trouverez pas de "misc
de base". Cela signifie:misc
n'est pas un appareil de classe; c'est juste un tas de pilotes qui ne rentrent pas dans une autre catégorie. Des choses comme des baromètres, des Sacd, des suites de tests et d'autres choses étranges.Regardez le haut de
drivers/misc/Kconfig
:Tous les éléments de cette Kconfig ne dépend pas d'une "
misc
de base", mais sur d'autres noyaux (i2c
,pci
,tty
, etc.). Généralement, lorsqu'un pilote est vraiment à l'aide d'un pilote de base, vous allez le voir dans ses Kconfig. Par exemple, à peu près tous lesleds
pilotes (drivers/leds
) dépendent de laleds
de la classe de base et qui ont dans leurs Kconfig nœud:Peut-être
misc
pilotes sont tous de caractère pilotes (je ne vérifie pas tous d'entre eux), mais quelque chose d'autre serait encore travail là, bien qu'il serait probablement à la mauvaise place. Je crois que beaucoup demisc
pilotes pourraient être déplacés vers des lieux plus propices maintenant... un vétéran du noyau hacker pourrait le confirmer.Donc, pour répondre à votre question:
misc
pilotes n'ont pas à être caractère pilotes, de sorte que les deux catégories sont totalement indépendants. Unmisc
pilote n'apporte rien de plus qu'un caractère pilote, car unmisc
conducteur est, encore une fois, rien de spécial.Mise à jour: le Honeywell compas du pilote est un excellent exemple. Il est petit et simple.
Il communique avec le compas réel à l'aide de l'I2C. Cet appareil n'apparaît pas comme un personnage de l'appareil, alors oubliez les grands numéro 10. Cependant, il apparaît quelque part dans Sysfs, sous
/sys/bus/i2c/devices
, à l'instar de tous les composants I2C faire. Et vous verrez le Sysfs attributs, il ajoute à son groupe, commeheading0_input
qui indique la direction de la boussole lors de la lecture.Donc, ici, vous avez: une
misc
pilote qui n'est pas un caractère pilote.OriginalL'auteur eepp
Oui,il vient de Personnage de pilote, et Divers pilote également avoir plusieurs point d'entrée read(), write(), ioctl() (parce que dans miscdevice 's structure ont déjà filefile_operations structure)
dans ma compréhension, quand nous avons besoin d'écrire un petit pilote (avoir un seul point d'entrée ou un peu plus (2,3,... des points d'entrée) <<< moyenne, petit pilote), il faut utiliser divers pilote. il permettra d'éviter de gaspiller de la RAM, si nous inscrire de nouveaux plus grand Nombre.
OriginalL'auteur Thi Nguyen