Bonjour,
je suis en train de porter un drivers usb depuis windows sur un UBUNTU 9.04.
le plus gros du travail est fait.
malheureusement, je n'arrive pas a dialoguer avec mon pilote via les IOCTL.
pourtant j'ai suivi à la lettre tout ce que j'ai compris du livre "Linux Device Drivers, Third Edition".
lorsque je fait un IOCTL, je reçois toujours une réponse négative, avec le errno a ENOTTY.
en lançant mon programme à l'aide de strace, je trouve bien le code de mon IOCTL perso.
je ne comprend pas d'ou cela vient.
si quelqu'un a une idée? une piste?
voici quelques bout de codes:
définitions dans un .h commun
code du drivers
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 #define TEST_CONST 0xF9 #define TEST_IOCTL_NBR_DEVICES _IOWR(TEST_CONST, 0,void *)
dans le programme exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 struct file_operations Fops = { .owner = THIS_MODULE, .read = test_read, .ioctl = test_ioctl, .open = test_open, .release = test_release, }; //dans l'init du drivers register_chrdev(253,DEVICE_NAME,&Fops);
merci d'avance!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 int hTest = -1; int result = -1; hEXX=open("/dev/TEST_CTL",0); if (hEXX < 0) return -1; result=ioctl(hEXX,TEST_IOCTL_NBR_DEVICES,NULL); if( result == -1) return errno; return 0;
Partager