Ich schreibe einen Treibercode, um einige Registerwerte von x86 zu lesen., Als ich meine User-Space-Anwendung lief habe ich den folgenden Fehler.ioctl Fehler beim Öffnen von Char dev-Datei
ioctl: Ungeeignete ioctl für Geräte
hier ist der Code sniff ..
fd = open_drvfile();
if(ioctl(fd, IOCTL_MSR_CMDS, (long long)msr_start) == -1) {
perror("ioctl:");
exit (0);
}
und open_drvfile() nur offen (erstellen und offen) die char-Datei wie unten
fd = open("/dev/" DEV_NAME, O_RDWR|O_CREAT);
if (fd == -1) {
perror("Failed to open /dev/" DEV_NAME);
}
return fd;
kann ich einen Punkt, an dem ich einen Fehler gemacht habe?
Ich verstehe nicht ganz, was Sie zu tun versuchen, aber da Sie auf ein Char-Gerät im Fragetitel verweisen, ist das O_CREAT-Flag unter der open() nicht sinnvoll für mich. Hast du das char Gerät mit 'mknod()' vor 'open()' erstellt? – pah
Ich benutze open(), um die Datei zu erstellen und zu öffnen (da die Datei nicht bereits vorhanden ist). Ich denke, das war falsch. Nachdem ich deine Antwort gesehen habe, habe ich mknod() verwendet, um eine Datei zu erstellen und O_CREAT entfernt, jetzt funktioniert es wie erwartet. Vielen Dank. –
Ich werde die Antwort posten, so dass es für andere hilfreich sein kann :) – pah