• 締切済み

エラー”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」を追っていってます。 >上の情報を元にトレース&分析頑張れ! 頑張ります!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • WindowsXPのアップデートを行ったらエラーが発生

    VB6.0で下記プログラムを作成したが、 WindowsXPのアップデートを行ったらエラーが発生するようになった。 ==プログラム Public Cn_Tables As ADODB.Connection Public Sub DB_Open() Set Cn_Tables = New ADODB.Connection Cn_Tables.ConnectionString = "Driver=Microsoft Access Driver (*.mdb);" & _ "DBQ=" & App.Path & "\TEST.MDB" Cn_Tables.Open End Sub ==エラー内容 「オートメーション エラーです。 指定されたプロシージャが見つかりません。 」 ※Openメソッド実施でエラー発生

  • エラーが発生したため○○を終了します。

    「エラーが発生したため○○を終了します。プログラムをもう一度開始する必要があります。 エラーログを作成しています。」 というメッセージがでてきます。 ○○のところには、DFrgNtfs.exeとmmc.exeとCTSvcCDA.exeという3つの場合があります。 どうしたら解決できるのでしょうか?とくにデフラグしようとするとこのメッセージがでてきてデフラグできず困ってます。 お願いします。

  • データベースのオープンエラーが発生

    WindowsVista SP1にてメニューから特定のプログラムを実行すると Accessデータベースのオープンにてエラーが発生します。 言語はVB6.0です。 メニューからShellExecute "runas"にて実行を行うとAccessデータベースのオープンにて 実行時エラー3051が発生します。 EXEをダブルクリックしたり、Shellにて実行した場合は正常にオープンされます。 lngLoadPgm = ShellExecute(0, "runas", "C:\WORK\TEST.EXE", "", vbNullString, 1)  NG lngLoadPgm = Shell("C:\WORK\TEST.EXE", vbNormalFocus)               OK 原因がまったくわかりません。 わかる方がいましたら教えて下さい。 よろしくお願いします。

  • 実行時エラー '8021'とはどんな内容のエラーでしょうか?

    VB6 でプログラムを作成していますが、たまに"実行時エラー'8021':DCB (Device Control Block)の取得時に、ポートで内部エラーが発生しました。"というメッセージが表示されプログラムが止まってしまいます。どういった内容のエラーなのか分かりませんので、しっている方がいらっしゃいましたら教えて頂きたいのですが。よろしくお願いします。

  • IOアドレスを変更できるパラレル増設ボード

    IOポートを0x378に設定できるパラレル増設ボードは無いでしょうか。 古いプログラムを使っていますが、IOポートに直接アクセスしているようです。 ソースも残っていないし、作者もいませんのでプログラム側での変更は不可能です。 IOポートへの直接アクセスを仲介するデバイスドライバーを使用しています。 現在XPで動作しています。 購入予定の新しいPCにはパラレルポートがついていません。 そこでPCI Expressで増設するボードを探していますが、IOアドレスを変更できるものがあるのかどうか知りたいです。

  • 通信エラー・・・

    通信ポートがオープンできませんでした。 ポート番号が正しくないか通信ポートが使用中、あるいは空がありません。 というエラーを解除できません。 万能携帯15を使用しようとしているのですが携帯のデータをPCに取り込めないのです。 デバイスマネージャーでのドライバはすべて正常を示しております。 よろしくお願いします。

  • ADOでSeekメッソッドが使えません。

    Access 2003 VBA で、ADOを使用してSQL Server 2008 R2 Express のテーブルを参照しています。 Seekメソッドを使いたいのですが、Indexプロパティーを設定すると、 「現在のプロバイダーは Index 機能に必要なインターフェイスをサポートしてません。」 のエラーが発生してしまいます。 SQL Server は初心者です。よろしくお願いいたします。 -以下ソースプログラムです- Dim con As New ADODB.Connection Dim rst As New ADODB.Recordset con.Open "Provider=SQLOLEDB;SERVER=xxxxx;DATABASE=xxxxxx;UID=sa;PWD=xxxxxx;" 'SQL-Serverへ接続 rst.Open "testdata", con, adOpenKeyset, adLockOptimistic, adCmdTableDirect Debug.Print rst.Supports(adSeek), rst.Supports(adIndex) ’----結果、  false false rst.Index = "index1" ' ---- 「現在のプロバイダーは Index 機能に必要なインターフェイスをサポートしてません。」のメッセージ rst.Seek 0, adSeekAfter

  • window.close()?でエラー

    javaScriptのwindow.close()で「プログラムにコマンドを送信している時に、エラーが発生しました」と言うエラーが出てしまいます。 但し、Windowは正常にクローズされています。 親画面から子画面をオープンし、子画面のオープン後に親画面自身をクローズしている処理です。 window.opener = window; window.close(); でクローズしています。 宜しくお願いします。

  • エラーが発生したため…というエラーメッセージについて

    Score Grapher Aliveという楽譜ソフトを起動しようとしたら、 「エラーが発生したため、ScoreGlapherAlive.exeを終了します。プログラムをもう一度開始する必要があります。 エラーログを作成しています。」 というエラーメッセージが表示され、アプリケーションが強制終了しました。 Windows Updateやディスクスキャン、再インストール等してみたのですが、結果は同じです。 どうしたら、正常に起動することが出来るのでしょうか? OSは、Windows2000です。

  • CreateFile が ERROR_PATH_NOT_FOUND のエラーになる

    VC++を使っています。OSは Windows2000 です。 CreateFile で指定するファイル名をフルパスで指定し、EXEを同じ ディレクトリに置いて実行したところエラーとなり、詳細コードが ERROR_PATH_NOT_FOUND でした。 プログラムは以下のようになっています。 #define AAA "c:winnt\\system32\\AAA.log" hOpen = CreateFile( AAA, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); 上記プログラムの AAA.exe を system32下に置いて実行すると、 パスが不正だと怒られてしまいます。。。 AAA.exe を別ディレクトリで実行すると、sysytem32下にちゃんと ファイルが作成されます。 AAA.exe を CreateProcess する BBB.exe を造って試しましたが、 やはり BBB.exe が system32下にあると駄目でした。 どうやらカレントディレクトリが同じだと駄目みたいです。 「"AAA.log"」とせずにフルパスとしているのは以下の理由のためです。 ・ファイルは必ず system32下に作成したい。 ・AAA.exe は必ず system32下にある。 しかし、BBB.exe が必ず system32下にあるとは限らないため、 「"AAA.log"」とした場合、BBB.exe を実行したディレクトリに 作成されてしまう。 CreateFile には今回のような制限があるのでしょうか??? #ヘルプを見る限り、書いてないです。。。