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?
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
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. –
Je posterai la réponse, donc il peut être utile aux autres :) – pah