2017-10-20 4 views
0

私はタイマを実装したカーネルモジュールを持っています。同時に、私はprocから読み書きするための新しいカーネルモジュールを作成することができます。私が理解していないのは、同じカーネルモジュールで2つの操作を組み合わせる方法です。キャラクタデバイスも使用するカーネルモジュールでprocに書き込む

私のアプリケーションはこのように動作します。ユーザープログラムは、nミリ秒で期限切れになるタイマーを作成するために使用される番号nをカーネルモジュールに書き込みます。これを実現するために、writereadの機能を実装し、init機能で使用しているstruct file_operationsに文字デバイス(タイマー)を登録するためにそれらをリンクしました。

procファイルの場合、ユーザープログラムからの要求を処理するwriteread関数を宣言する必要があります。これは私を混乱させるもので、私はすべてを一緒に組み合わせる方法を理解できません。

+1

わずか2 **異なる** '構造体file_operations'変数を定義します。文字デバイスには1つを使用し、procファイルには1つを使用します。彼らは実際には独立しています。 – Tsyvarev

+0

@Tsyvarevしかし、私はユーザーがprocに提供する数字「n」を書く必要があるので、私のモジュールではタイマーとprocは独立していません。 – David

+0

@David彼はファイル操作が独立していることを意味していました。 – Sasi

答えて

1

Tsyvarevが使用することを述べたように異なるfile_operations

static struct proc_dir_entry *procfs; 

static const struct file_operations proc_fops = { 
.owner = THIS_MODULE, 
.open = open_proc_fn, 
.read = read_proc_fn, 
}; 

static const struct file_operations char_fops = { 
.owner = THIS_MODULE, 
.open = open_char_fn, 
.read = read_char_fn, 
.write = write_char_fn, 
}; 


int __init init_mod (void) { 
    procfs = proc_create("filename", 0, NULL, &proc_fops); 
    if(!proc) 
     return -1; 
    <Register char device with &char_fops > 
    return 0; 
} 
関連する問題