• 締切済み

エラー”Illegal seek”はどんなときに発生するもの?

Linuxのデバイスドライバの作り方の勉強を始めました。 まず、CQ出版Interfaceの2002年2月特集記事から、サンプルドライバとアプリケーションプログラムをコーディングして、動かしてみました。 Linuxは、Red Hat7.2Jを使っています。 <1> 作成したスペシャルデバイスの"/dev/wildio0" をopen → ioポートをread → close <2> open → ioポートをread → "Illegal seek"が発生 → close <3> EXEプログラムを終了 → EXEプログラムを実行open → ioポートをread   このときには、"Illegal seek"は発生せず、"Success"です。 作成したドライバの#lsmodのUsed数も確認したのですが、openで+1、closeで-1していました。 何がどう悪いのか見当さえ付けられていません。 よろしくお願いします。

みんなの回答

  • onosuke
  • ベストアンサー率67% (310/456)
回答No.1

準備するもの: linux kernelのソースコード はじめに: ソースコードを追うのに、文字列化されたエラーメッセージだと不便極まります。 メッセージではなく、エラーナンバーとしてそのエラーを確保するのが第一歩。 linux/include/arch/error.h #define ESPIPE 29 /* Illegal seek */ このESPIPEを手がかりに追います。 その2: ESPIPEをキーにカーネルソース、デバイスドライバのコードを検索。(grepでも何でも使って) カーネルソースだと linux/fs/... linux/fs/devfs/.... あたりのものが関係あるかも? その3: 上の情報を元にトレース&分析頑張れ! わたしが >CQ出版Interfaceの2002年2月特集記事 自体を拝見していないため、ここで終いです。

sasacoro
質問者

お礼

回答ありがとうございます。出張でメール見れませんでした、すみません。 2週間のブランク明けなので、いろいろ思い出しながら、「はじめに~その3」を追っていってます。 >上の情報を元にトレース&分析頑張れ! 頑張ります!