L'accès à un port série à partir d'un module du noyau linux
Bonjour Noyau Linux Pilote Gourous!
Je suis en train d'écrire un v4l2 pilote d'un appareil photo qui utilise une interface série pour la configuration. Je voudrais le pilote de configurer la caméra, car il permet au client de code cohérent à travers les modèles d'appareils photo. La question est: quelle est la meilleure façon d'accéder à l'appareil photo de l'interface série à partir du module pilote?
De ce que j'ai entendu, l'accès à des fichiers à partir d'un pilote de noyau est un gros no-no, mais il peut être fait. En tant que tel, je suis actuellement en utilisant l'extrait de code suivant, mais il se sent comme un hack.
oldfs = get_fs();
set_fs(KERNEL_DS);
fd->f_pos=0;
fd->f_op->write(fd, data, data_len, &fd->f_pos);
set_fs(oldfs);
Ma question est vraiment: quelle est la bonne façon de le faire?
OriginalL'auteur IndigoFire | 2011-03-21
Vous devez vous connecter pour publier un commentaire.
Je présume que, depuis un port série est en cause, ce doit être une sorte de système embarqué. Après tout, pas beaucoup de Pc ont des ports série. J'ai également supposer que le port série peut être considérée comme une connexion permanente, au moins à partir de la perspective de l'utilisateur. Si cela est vrai, alors vous ne voulez pas vraiment un appareil TTY. Vous souhaitez accéder à l'appareil comme un privé UART.
Si vous avez un coup d'oeil à la Wolfson codecs audio (audio/soc/wm*.c) vous verrez un exemple de dispositifs principalement à communiquer sur I2S, mais ont un auxiliaire interface I2C pour la configuration. C'est conceptuellement ce que vous voulez, je crois. Le conducteur présente une interface unifiée pour les logiciels, et les questions de commandes pour le matériel approprié. Évidemment, c'est beaucoup plus propre que d'avoir à exposer du matériel détails de mise en œuvre de l'espace utilisateur.
Je ne pouvais pas trouver un bon exemple d'un UART pilote dans le noyau qui fonctionne de cette façon, mais j'espère que j'ai décrit ce qu'il faut chercher. À partir d'une pratique plutôt qu'à la technique de la pureté point de vue, c'est peut-être mieux à faire fichier I/O à partir du noyau.
OriginalL'auteur jbarlow
D'abord, je vous conseille de trouver un moyen de le faire à partir de l'espace utilisateur, si possible: ce que vous essayez de faire ici, c'est vraiment de l'espace utilisateur de code dans le code du noyau.
Mais si vous ne trouvez pas un moyen de le faire, ce l'article vous montre comment faire de l'espace utilisateur appels en kernelspace.
Puisque vous voulez accéder à un port série, vous devez avoir les appels ats orienté, par exemple pour ouvrir:
Merci pour l'excellent article! Il explique beaucoup de choses que je n'ai pas compris à propos de noyau et utilisateur des espaces.
OriginalL'auteur Longfield