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 : 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 *)
code du drivers
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);
dans le programme exemple :
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;
merci d'avance!