2012-10-19 5 views
7

私はLinux用のデバイスドライバを書いています。 4つのマイナー番号を持つデバイスを作成します。私たちがマイナー番号3でデバイスに書き込もうとするたびに、デバイスを強制終了し、現在はボガのデバイスに書き込んでいる以外は何もしないと仮定しています。ここに私の現在のコードの一部であり、必要であれば、私はより多くのコードを投稿することができます:Linuxデバイスドライバ、ファイルディスクリプタを使用してマイナー番号を取得できますか?

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 

} 

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); 

} 

方法がある場合、私は疑問に思ってマイナー番号を取得します。私はlinux/fs.hを見て、ファイル構造体にprivate_dataというメンバがあるのを見ましたが、これを呼び出そうとする度に、現在nullに設定されているのでシステムがクラッシュします。

また、構造ファイルからマイナー番号を取得しようとしていないか、最初にデバイスを開いたときにそれを追跡する必要がありますか?

答えて

13

あなたはマイナー番号それほどのように取得することができます。

iminor(filp->f_path.dentry->d_inode) 
関連する問題