私はカーネル Linux 2.6.34.14 に取り組んでいます。
このようにして、以前に定義された構造体へのポインターを構造体ファイルに (include/linux/fs.h に) 追加しました。
struct session{
char *session_buffer;
loff_t session_dimension;
};
struct file {
struct session *sess_punt;
}
その後、構造体を open.c に割り当て、dentry_open (fs/open.c) でそれを行う必要があります。
このコードで言いたいのは、open が呼び出されたときに特定のフラグがある場合は、構造体とバッファーを構造体に割り当てます。
if(f->f_flags & O_SESSION){
f->sess_punt = kmalloc(sizeof(struct session), GFP_KERNEL);
f->sess_punt -> session_buffer = kmalloc(MAX_BUFFER_SIZE, GFP_KERNEL);
//f->sess_punt -> session_dimension = 0;
}
else f->sess_punt = NULL;
問題は次のとおりです。
新しいカーネルをコンパイルしましたが、すべて問題ありません。そのカーネルに入ろうとしましたが、「カーネル パニック - 同期していません: init を強制終了しようとしました」というメッセージが表示されます。
なぜですか?どこが間違っていますか?