[Pilotes] Conception de pilote périphérique ?

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
A voir également:

2 réponses

kilian Messages postés 8854 Statut Modérateur 1 526
 
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.
0
ekra Messages postés 1873 Statut Membre 342
 
Le temps de les faire, t'auras peut-être changé de matos !
!-D
0
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité 3 570 > ekra Messages postés 1873 Statut Membre
 
Salut,

Le temps de les faire, t'auras peut-être changé de matos !


EXCELLENT!!!

lami20j
0
Arno59 Messages postés 4753 Statut Contributeur 487
 
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 ?
0