2016-08-04 1 views
1

J'écris un code de pilote, pour lire certaines valeurs de registre de x86., Quand j'ai couru mon application de l'espace utilisateur j'ai eu l'erreur ci-dessous.Erreur ioctl lors de l'ouverture du fichier char dev

ioctl: ioctl inappropriée pour le dispositif

est ici le sniff code ..

fd = open_drvfile(); 
if(ioctl(fd, IOCTL_MSR_CMDS, (long long)msr_start) == -1) { 
    perror("ioctl:"); 
    exit (0); 
} 

et open_drvfile() vient d'ouvrir (créer et ouvrir) le fichier char comme ci-dessous

fd = open("/dev/" DEV_NAME, O_RDWR|O_CREAT); 
if (fd == -1) { 
    perror("Failed to open /dev/" DEV_NAME); 
} 
return fd; 

peut un certain point où j'ai fait une erreur sur ce point?

+0

Je ne comprends pas très bien ce que vous essayez de faire, mais puisque vous référencez un périphérique char dans le titre de la question, le drapeau O_CREAT sous open() n'a pas beaucoup de sens pour moi. Avez-vous créé le périphérique char avec 'mknod()' avant 'open()'? – pah

+1

J'utilise open(), pour créer et ouvrir le fichier (puisque le fichier n'est pas déjà présent). Je pense que c'était faux. Après avoir vu votre réponse, j'ai utilisé mknod() pour créer un fichier et supprimé O_CREAT, maintenant il fonctionne comme prévu. Merci. –

+0

Je posterai la réponse, donc il peut être utile aux autres :) – pah

Répondre

0

Dispositif char implique qu'il doit être créé avec mknod(), et non avec O_CREAT sous open()flags (qui va créer un fichier normal, pas un dispositif de char).

(voir commentaires sur la question).