Sto sviluppando un modulo del kernel che utilizza unlocked_ioctl. L'ho provato con la versione del kernel 2.6.24-23-generic e funziona perfettamente. Ora l'ho provato con la versione 3.3.1-1-ARCH del kernel e succede qualcosa di strano: la funzione ioctl non viene eseguita quando il valore della richiesta (cmd) è 2. Restituisce 0, ma la funzione non viene eseguita. Al fine di verificare che non viene eseguito ho fatto la seguente:ioctl non viene chiamato se cmd = 2
static long midriver_ioctl(struct file *file,
unsigned int cmd, unsigned long arg) {
printk("Called with cmd = %d\n", cmd);
ho scritto un programma di test che chiama ioctl per questo dispositivo 0-4096, e posso vedere nel dmesg il messaggio "Chiamati con cmd = n "per tutti quei valori, tranne" 2 ", l'unico che non viene mostrato.
Eventuali indizi su ciò che sto facendo male?
Grazie in anticipo,
Alcuni codice nella catena sta intercettando == cmd 2 e la manipolazione? – zvrba