問題タブ [kernel-module]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - ioctl() を使用してカーネル モジュールを操作するにはどうすればよいですか?
そこで、linux/timer.h ファイルを使用するカーネル モジュールを作成しようとしています。モジュール内だけで動作するようになりましたが、現在はユーザープログラムから動作させようとしています。
これが私のカーネルモジュールです:
具体的には、ユーザー プログラムで TimerSetup() 関数を呼び出す必要があります。ioctl() を使用する必要があることはわかっていますが、MODULE FILE で TimerSetup() を ioctl() 経由で呼び出せるように指定する方法がわかりません。
また、私の 2 番目の質問: モジュールを insmod でき、正しいメジャー番号で /dev/mytimer に mknod することもできました。しかし、ファイル記述子を取得できるようにopen()しようとすると、-1が返され続けました。これは間違っていると思います。パーミッションが適切であることを確認しました (実際、念のため 777 にしました)... それでも機能しません... 何か足りないものはありますか?
念のため、ユーザープログラムを次に示します。
linux - linux / timer.h setup_timer()有効期限関数が機能していませんか?
したがって、setup_timer()のTimerExpire関数は大きなパニックを引き起こします(以下に投稿します)が、TimerExpire()への通常の関数呼び出しは実際に私の入力を出力します。
誰もが理由を知っていますか?
これはエラー出力です(ちなみに、これはLinuxカーネルであるgumstix verdexエミュレーター上にあります):
module - モジュールはどこにありますか?
カーネルモジュールを作成し、以下のコードを使用して/ dev/mytimerエントリを作成しようとしました。
/dev内のモジュールが/dev/ mytimerとして表示されません...しかし、lsmod
表示すると、リストにエントリmytimerとして表示されます。
モジュールはどこでどのように見つけることができますか?とにかくそれを/devに入れることはありますか?
ありがとう!
c - 引数を間違って渡しますか? ハの質問
タイマーが刻々と切れたときに TimerExpire 関数が最終的に呼び出されると、意味不明な出力が出力されます。理由を知っている人はいますか?しかし、私の IOCTL_MAKE_TIMER の printk 関数は正しく出力されるので、データを間違って渡していることが原因だと思います。
setup_timer() は、最初の引数でタイマーを設定し、2 番目の引数で指定された関数を呼び出すように指示し、データ (3 番目の引数) をその関数に渡します。
私の場合は、TimerExpire(char* data) 関数を呼び出して、char* から kern_arg への final_arg を渡します。kern_arg を関数に直接渡そうとしたこともありました...また、意味不明になりました。
以前 (昨日)、char kern_arg[] の代わりに char* kern_arg があり、それは完全に機能しましたが、安全ではなかったと思います。
誰かが何らかの洞察を提供できれば、それは素晴らしいことです! ありがとう!
process - 引数付きのioctlを使用するようにproc_entry->write_procに指示しますか?
私はこれを行ういくつかのサンプルコードを見てきました:
ただし、私のモジュールでは、読み取りと書き込みの代わりにioctlを使用しました。これが私のioctl関数プロトタイプです:
読み取りの場合、私の「fcn」はIOCTL_GET_TIMERであり、書き込みの場合、私の「fcn」はIOCTL_SET_TIMERです。
とにかくこのようなことをするために:
しかし、「args」引数を渡さないのですか?
あるいは、module_read関数とmodule_write関数を記述して、それらにioctlを呼び出させるのがより簡単な方法かもしれません。
助けてくれてありがとう!
linux - Linux カーネル - モジュールを介して動的にシステム コールを追加する
モジュールなどを介してシステムコールを動的に追加する方法はありますか? sys_call_table[]
モジュールがインストールされているときに、配列を変更してネイティブではなくオーバーライドされた関数を取得するだけで、既存のシステム コールをモジュールでオーバーライドできる場所を見つけましたが、新しいシステム コールとモジュールでこれを行うことはできますか?
linux-kernel - ユーザー モード Linux - モジュールのインストール エラー
ユーザー モード Linux のモジュールで「make」を実行して、単純なメイクファイルをインストールしようとしています。これが私のメイクファイルです:
これをユーザー モードの Linux で実行すると、次のエラーが表示されます。
問題は、 の下にファイルが存在しないことです/lib/modules/
。2.6.28 またはビルド用のディレクトリはありません。私が読んだことから、これらは へのシンボリックリンクである必要がありますが、 の下には/usr/src
、その下/usr/src
にファイルも表示されません。
linux-kernel - ユーザーモードLinuxでモジュールをコンパイルするにはどうすればよいですか
ユーザー モード Linux 用のモジュールをコンパイルするのに苦労しています。ユーザーモードLinuxで非常に基本的なモジュールをコンパイルする基本的な方法が必要なだけで、それを機能させることができないようです。sourceforge で UML のハウツーを調べましたが、うまくいきませんでした。誰かがそれが必要とする実例を持っていますか?
ありがとう!
linux-kernel - 割り込み記述子テーブルの変更
Linux 2.6.26カーネルバージョンを使用しており、カーネルモジュールを使用して割り込み記述子テーブルを変更しようとしています。ここでページフォールトテーブルエントリを変更しようとしているだけです。そのため、元のIDTのコピーを作成し、ページフォールトテーブルエントリのみに変更を加えます。ISRの目的は、元のページフォールトハンドラーを呼び出す前に、ページフォールトの情報を出力することです。しかし、insmodを使用してカーネルをロードすると、カーネルがクラッシュします。つまり、「loadIDTR」関数を使用してカーネルがクラッシュします。さらにデバッグすると、IDTRをロードしてもエントリを変更しないことで、正常に機能することがわかりました。私は考えが足りません。
以下のコードを貼り付けました
linux-kernel - Linux カーネル モジュール - proc ファイルの作成 - proc_root 宣言されていないエラー
カーネル モジュールを使用して proc ファイルを作成および読み取り/書き込みするために、この URL からコードをコピー アンド ペーストすると、proc_root が宣言されていないというエラーが表示されます。これと同じ例がいくつかのサイトにあるので、うまくいくと思います。このエラーが発生する理由はありますか? 私のmakefileには何か違うものが必要ですか?以下は私のmakefileでもあります:
基本的な proc ファイル作成のサンプル コード (最初のテストを行うための直接コピー アンド ペースト): http://tldp.org/LDP/lkmpg/2.6/html/lkmpg.html#AEN769
私が使用しているメイクファイル: