Sto scrivendo un driver di periferica per Linux. Crea un dispositivo con 4 numeri minori. Ogni volta che proviamo a scrivere sul dispositivo al numero 3 minore, supponiamo di uccidere il dispositivo e attualmente non si suppone di fare nient'altro se non la stampa che sta scrivendo sul dispositivo booga. Ecco alcuni dei miei codice corrente e posso postare più di codice, se necessario:Driver di dispositivo Linux, è possibile ottenere il numero minore utilizzando un descrittore di file?
metodo Write:
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
}
Come viene testata:
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);
}
Mi chiedo se c'è un modo per ottenere il numero minore. Ho guardato in linux/fs.h e ho visto che la struttura del file ha un membro chiamato private_data, ma ogni volta che tento di chiamare questo, il sistema si bloccherà perché attualmente è impostato su null.
O non dovrei cercare di ottenere il numero minore dal file struct e dovrei cercare di tenerne traccia quando apro il dispositivo per la prima volta?