[Pilotes] Conception de pilote périphérique ?
Arno59
Messages postés
4753
Statut
Contributeur
-
Arno59 Messages postés 4753 Statut Contributeur -
Arno59 Messages postés 4753 Statut Contributeur -
Bonjour,
Je poste ce message dans ce forum, car il est plus destiné à linux.
J'ai plusieurs périphériques fonctionnant sous Microsoft, comment créer un pilote pour les matériels suivant:
- Scanner Canon D1250U2 (car SANE ne le supporte pas)
- Periphériques Canon et Epson
Je poste ce message dans ce forum, car il est plus destiné à linux.
J'ai plusieurs périphériques fonctionnant sous Microsoft, comment créer un pilote pour les matériels suivant:
- Scanner Canon D1250U2 (car SANE ne le supporte pas)
- Periphériques Canon et Epson
A voir également:
- [Pilotes] Conception de pilote périphérique ?
- Pilote son windows 10 - Télécharger - Pilotes & Matériel
- Comment mettre à jour ses pilotes - Guide
- Télécharger pilote imprimante hp - Télécharger - Pilotes & Matériel
- Pilote hdmi windows 10 - Télécharger - Pilotes & Matériel
- Pilote manette pc - Télécharger - Pilotes & Matériel
2 réponses
Salut,
D'abord assure toi que ce materiel n'est réellement pas supporté sous Linux.
Sinon, j'ai entendu parler de NDIS wrapper. Je ne suis pas sûr mais il me semble que ça sert à adapter des pilotes windows sous Linux.
Mais si tu veux vraiment te lancer dans l'aventure du developpement d'un pilote sous Linux, il ya plusieurs choses à savoir:
Si c'est du materiel usb, tu peux programmer ton pilote en "userland", ce qui signifie que tu n'as pas besoin de coder ça dans le noyau car ton pilote peut être une aplication normale. pour ça il faut utiliser la libusb.
Et je peux t'assurer que c'est plus facile de programmer en userland qu'en kernelland (opposition application normale / application intégrée dans le noyau).
_ C'est plus facile à debugguer en userland (le noyau ne va pas cracher, donc pas besoin de redémarrer. Tu peux très bien tester/redémarrer 20 fois avant de trouver ton erreur). Si tu as un bug en userland, tu as juste à corriger ton application et à réessayer directement.
_L'allocation memoire en kernelland est un peu chiante.
_La pile est petite dans le noyau. La pile c'est la zone memoire qui contient les variables statiques. Ca signifie qu'il faut beaucoup recourir à l'allocation de memoire dynamique, et comme je l'ai dit au dessus, c'est un peu chiant dans le noyau. Pas de fonction comme malloc mais des fonctions comme kmalloc qui ne peuvent pas (ou du moins il ne vaut mieux pas) reserver plus de 128 Ko à la fois.. Sinon, il ya vmalloc (pour reserver de la memoire dans la swap, c'est à dire la memoire virtuelle), là tu peux réserver de plus grosses quantités mais tu ne peux pas faire transiter des données directement depuis l'usb vers la swap (en tout cas, moi ça faisait cracher mon noyau). Il ya d'autres methodes pour la memoire que je n'ai pas essayé.
Si malgrés tout, tu veux vraiment faire ton pilote au niveau du noyau, eh bien je te souhaite bonne chance. Voici un très bon bouquin pour apprendre à faire ça:
https://lwn.net/Kernel/LDD3/
Mais c'est en anglais et il faut s'accrocher. Il faut aussi impérativement être à l'aise avec le langage C et connaître les bases du fonctionnement de Linux (principalement savoir comment fonctionne le repertoire /dev) avant de te lancer dans ce bouquin.
Et ce n'est pas fini, il faut aussi savoir ce que tu veux leur dire à tes périphériques. Ils utilisent des messages précis pour communiquer. Donc il faut que les fabricants de tes périphériques te donnent les spécifications techniques de ces périphériques.
Bon courage :-)
Au moins en faisant ça, tant en userland qu'en kernelland, on apprend plein de choses.
D'abord assure toi que ce materiel n'est réellement pas supporté sous Linux.
Sinon, j'ai entendu parler de NDIS wrapper. Je ne suis pas sûr mais il me semble que ça sert à adapter des pilotes windows sous Linux.
Mais si tu veux vraiment te lancer dans l'aventure du developpement d'un pilote sous Linux, il ya plusieurs choses à savoir:
Si c'est du materiel usb, tu peux programmer ton pilote en "userland", ce qui signifie que tu n'as pas besoin de coder ça dans le noyau car ton pilote peut être une aplication normale. pour ça il faut utiliser la libusb.
Et je peux t'assurer que c'est plus facile de programmer en userland qu'en kernelland (opposition application normale / application intégrée dans le noyau).
_ C'est plus facile à debugguer en userland (le noyau ne va pas cracher, donc pas besoin de redémarrer. Tu peux très bien tester/redémarrer 20 fois avant de trouver ton erreur). Si tu as un bug en userland, tu as juste à corriger ton application et à réessayer directement.
_L'allocation memoire en kernelland est un peu chiante.
_La pile est petite dans le noyau. La pile c'est la zone memoire qui contient les variables statiques. Ca signifie qu'il faut beaucoup recourir à l'allocation de memoire dynamique, et comme je l'ai dit au dessus, c'est un peu chiant dans le noyau. Pas de fonction comme malloc mais des fonctions comme kmalloc qui ne peuvent pas (ou du moins il ne vaut mieux pas) reserver plus de 128 Ko à la fois.. Sinon, il ya vmalloc (pour reserver de la memoire dans la swap, c'est à dire la memoire virtuelle), là tu peux réserver de plus grosses quantités mais tu ne peux pas faire transiter des données directement depuis l'usb vers la swap (en tout cas, moi ça faisait cracher mon noyau). Il ya d'autres methodes pour la memoire que je n'ai pas essayé.
Si malgrés tout, tu veux vraiment faire ton pilote au niveau du noyau, eh bien je te souhaite bonne chance. Voici un très bon bouquin pour apprendre à faire ça:
https://lwn.net/Kernel/LDD3/
Mais c'est en anglais et il faut s'accrocher. Il faut aussi impérativement être à l'aise avec le langage C et connaître les bases du fonctionnement de Linux (principalement savoir comment fonctionne le repertoire /dev) avant de te lancer dans ce bouquin.
Et ce n'est pas fini, il faut aussi savoir ce que tu veux leur dire à tes périphériques. Ils utilisent des messages précis pour communiquer. Donc il faut que les fabricants de tes périphériques te donnent les spécifications techniques de ces périphériques.
Bon courage :-)
Au moins en faisant ça, tant en userland qu'en kernelland, on apprend plein de choses.
Bonjour,
Je suis en train d'étudier la conception du matériel Canon, Epson
-> Canon : Scanner D1250 U2, Imprimante PIXMA iP90
-> Epson: scanner Perfection 3590 Photo http://www.epson.fr/content/FR/fr_FR/products/scanners/product_spec/EFS_Product_S...
Ou sont placé les pilotes (drivers) sous Linux ?
Concernant la réalisation du pilote en quel langage est-il en général conçu sous Inux ?
Je suis en train d'étudier la conception du matériel Canon, Epson
-> Canon : Scanner D1250 U2, Imprimante PIXMA iP90
-> Epson: scanner Perfection 3590 Photo http://www.epson.fr/content/FR/fr_FR/products/scanners/product_spec/EFS_Product_S...
Ou sont placé les pilotes (drivers) sous Linux ?
Concernant la réalisation du pilote en quel langage est-il en général conçu sous Inux ?
!-D
Le temps de les faire, t'auras peut-être changé de matos !
EXCELLENT!!!
lami20j