私はLinuxモジュールを書いていて、以下を取得しています:
Unable to handle kernel NULL pointer dereference
どういう意味ですか?
私はLinuxモジュールを書いていて、以下を取得しています:
Unable to handle kernel NULL pointer dereference
どういう意味ですか?
現在 NULL 値 (ゼロ) を持つポインターが逆参照されているように聞こえます。逆参照する前に、ポインターにアドレスを割り当てます。
例えば
int x = 5;
int * x_ptr = NULL;
x_ptr = &x; // this line may be missing in your code
*x_ptr += 5; //can't dereference x_ptr here if x_ptr is still NULL
これは、カーネルがヌル ポインターを参照しようとしたことを意味します。これにより、カーネルで処理できないページ フォールトが生成されます。ユーザー タスクを (ただしカーネル空間で) 実行している場合、通常は "Oops" が発生し、現在のタスクが (不潔に) 強制終了され、カーネル リソースがリークする可能性があります。割り込みなどの他のコンテキストにある場合は、通常、カーネル パニックが発生します。
カーネルは address から読み取ろうとしますが0
、これは明らかにカーネルが特別に扱っているようです (良いことです!)。ユーザーモードのアプリケーションからわかるように、カーネルには自分自身を強制終了する方法がないため (これらのアプリケーションはSegmentation Faultを受け取ります)、このエラーは致命的です。おそらくパニックになり、そのメッセージが表示されます。