0

オペレーティング システムのクラスで、単純な疑似スタック Linux デバイス ドライバーを作成する課題があります。たとえば、デバイス ドライバーに "Hello" を書き込むと、読み取り時に "olleH" が返されます。デバイス ドライバの読み取り/書き込み関数を呼び出して、それが FILO 方式で機能することを実証するだけのテスター プログラムを C で作成する必要があります。私はこれをすべて実行しました。私の意見では、私のテスター プログラムは割り当ての目的を示しています。ただし、好奇心から、BASH 内で次のコマンドを実行します。

echo "テスト" > /dev/driver

猫/開発/ドライバー

/dev/driver は、「mknod」を使用して作成した特殊ファイルです。ただし、これを行うと、エラーでいっぱいの黒い画面が表示されます。CNTRL+ALT+F7 を使用して GUI ビューに戻すと、BASH が「Kill​​ed」を返したことがわかります。

これが起こる原因を知っている人はいますか?テスター プログラムが open()、read()、および write() を呼び出して、すべてが正常に機能しているため、混乱しています。

コードを表示する必要がある場合は、尋ねてください。

4

1 に答える 1

1

提供しているバッファに書き込むデバイス ドライバの関数が、この問題を引き起こしている可能性があります。

デバッグするには、次の操作を実行できます。

  • まず、読み取り部分に問題がないことを確認します。これを確実にするために、入力から読み取った後に内部バッファーを使用できprintkます。

  • 次に、書き込み関数で、printk実際に何かを書き込むのではなく、いくつかの情報を書き込んで、すべてが正常であることを確認します。

また、ライターが書き込みが終了したことを明確にしていることを確認してください。デバイスドライバーについては特にわかりませんが、2回目に呼び出されたときに書き込まれたバイト数として0を返すか、eof変数を設定する必要があります(それが関数の引数の1つである場合)

于 2012-04-18T15:44:42.147 に答える