2012-10-19 14 views
7

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?

risposta

13

È possibile ottenere il numero minore in questo modo:

iminor(filp->f_path.dentry->d_inode) 
Problemi correlati