0

カーネル プログラミングは初めてで、2 つの質問があります。

  1. デバイスが (動的登録によって) 登録されていますが、アプリケーションでデバイス ファイルを開くことができません。考えられる理由は何ですか?
  2. デバイス ドライバーが 0 による除算を検出したときに返される適切なエラー コードは何ですか?

私のコードは、カーネルに単純な算術演算を実装しています。ioctl()ユーザー空間とカーネルの間の通信には、ベースのインターフェイスを使用します。

if(out.b==0) /*checking for divide by zero*/
  out.res=-EINVAL;
else
  out.res=out.a/out.b;

copy_to_user((values*)ioctl_param,&out,sizeof(values));
break; 
4

1 に答える 1

0

コードを提示しないと、最初の質問に答えられない可能性があります。

2つ目は、EINVALまたはおそらくERANGE.

あなたの場合、ioctl_param構造体で返す情報(ちなみに、これは本当に悪い変数名です)とioctl()呼び出し自体の戻りステータスを区別する必要があります。

正常に完了すると 0がioctl()返され、失敗すると errno が設定されることに注意してください。カーネルと C ライブラリがそのほとんどを処理してくれます。通常、あなたがしなければならないことは、あなたの関数から戻る-EINVALか、同様のものです。ioctl()

このようなもの:

if(out.b == 0) /*checking for divide by zero*/
  return -EINVAL;

out.res=out.a / out.b;

copy_to_user((values*)ioctl_param,&out,sizeof(values));
break; 
于 2012-05-18T07:42:29.197 に答える