Ich schreibe einen Gerätetreiber für Linux. Es erstellt ein Gerät mit 4 Minor-Nummern. Immer wenn wir versuchen, auf das Gerät unter der Nummer 3 zu schreiben, werden wir das Gerät töten, und momentan wird nichts anderes als das Drucken auf dem booga-Gerät ausgeführt. Hier einige meiner aktuellen Code und ich kann mehr Code schreiben, falls erforderlich:Linux-Gerätetreiber, Ist es möglich, die Minor-Nummer mit einem Dateideskriptor zu erhalten?
Write-Methode:
static ssize_t booga_write (struct file *filp, const char *buf, size_t count, loff_t *f_pose) {
printk("Attempting to write to booga device\n");
/* need to protect this with a semaphore if multiple processes
will invoke this driver to prevent a race condition */
if (down_interruptible (&booga_device_stats->sem))
return (-ERESTARTSYS);
booga_device_stats->num_bytes_written += count;
up(&booga_device_stats->sem);
return count; // pretend that count bytes were written
}
Wie es getestet:
static void run_write_test(char *device, int bufsize)
{
char *buf;
int src;
int out;
src = open(device, O_WRONLY);
if (src < 0) {
perror("Open for write failed:");
exit(1);
}
buf = (char *) malloc(sizeof(char)*(bufsize+1));
fprintf(stderr, "Attempting to write to booga device\n");
out = write(src, buf, bufsize);
fprintf(stderr, "Wrote %d bytes.\n", out);
free(buf);
close(src);
}
Ich frage mich, ob es einen Weg gibt um die Minor Nummer zu bekommen. Ich schaute in linux/fs.h und sah, dass die Dateistruktur ein Mitglied namens private_data hat, aber jedes Mal, wenn ich versuche, dies aufzurufen, wird es mein System zum Absturz bringen, da es derzeit auf null gesetzt ist.
Oder sollte ich nicht versuchen, die Minor-Nummer aus der Struktur-Datei überhaupt zu bekommen und sollte versuchen, es zu verfolgen, wenn ich das Gerät zum ersten Mal öffne?