問題タブ [linux-device-driver]

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.

0 投票する
1 に答える
2534 参照

linux-device-driver - Linuxカーネル2.6.31.5で「kill_proc()」を実行する方法

開発者向けのこの無料フォーラムをお試しください。シリアルドライバーをカーネル2.6.31.5に移行しています。2.4以降の問題を解決するためにさまざまな本や記事を使用してきました

これで、カーネル2.6.31.5でサポートされなくなったkill_procがいくつかあります。

これをカーネルに移行する最速の方法は何でしょうか2.6.31.5スレッドを強制終了する方法。彼らは本の中でkill()を使うと言っていますが、2.6.31.5ではそうではないようです。send_signalを使用するのは良い方法ですが、これを行うにはどうすればよいですか?task_structか何かが必要です。PIDとSIGTERMを指定して、スレッドを強制終了することができますが、知らないパラメーターを使用して構造体を設定する必要があるため、より複雑に見えます。

誰かが実際の例、またはカーネル2.6.31の最新情報がある場所へのリンクを持っているなら、私は非常にありがたいです。簡単に言えば、スレッドを強制終了する必要がありますが、これは難しいことではありません。;)

これが私のコードです:

kill_proc(ex_pid、SIGTERM、1);

/Jörgen

0 投票する
5 に答える
4483 参照

linux - Linuxカーネルモジュールビルドからのasm出力を保持する方法

私は 2.6.x カーネル用の Linux カーネル モジュールに取り組んでおり、アセンブリ出力を表示する必要がありますが、現在は一時ファイルとして実行されており、あとがきが削除されています。問題がどこにあるかを簡単に追跡できるように、アセンブリの出力を C ソース ファイルと混在させたいと考えています。これは ARMv6 コア用であり、どうやら objdump はこのアーキテクチャをサポートしていません。以下にメイクファイルを含めました。

0 投票する
6 に答える
13675 参照

linux - / devに新しいノードを散らかすことなく、ユーザースペースからLinuxカーネルモジュールと通信するにはどうすればよいですか?

ユーザースペースからカーネルモジュールと通信する方法は何ですか?通信とは、カーネルモジュールとユーザースペースプロセスの間で情報とコマンドを送信することを意味します。

私は現在2つの方法を知っています:

  1. 公開されたデバイスノードでopen/close / read / write/ioctl。
  2. エクスポートおよびフックされた/procファイルの読み取り/書き込み。

より具体的には、誰かが実際にハードウェアを駆動しないカーネルモジュールと通信するための最良の方法をアドバイスできますか?したがって、ioctl呼び出し専用に存在するスタブノードを/ devに散らかしてはいけませんか?ほとんどの場合、さまざまなステータス変数をチェックし、リクエストタイプタグを使用してデータのブロックを送信し、リクエストが成功したかどうかを確認する必要があります。

0 投票する
2 に答える
10271 参照

linux - Linux: デバイス ノードをエクスポートするモジュールを知るにはどうすればよいですか?

/dev デバイス ノードとそのメジャー/マイナー番号がある場合、このノードをエクスポートしたカーネル モジュール名を知るにはどうすればよいですか?

0 投票する
2 に答える
237 参照

linux-device-driver - Linux デバイスのクラスを NULL にすることはできますか?

device_create関数の第一引数に NULL ポインタを渡すことはできますか?

device_create() を使用して、sysfs にキャラクター デバイス ファイルを作成しています。このファイルは、物理デバイスを表すものではありません (さまざまなバスに接続された一連のデバイスへのアクセスを提供するために使用されます)。このようなファイルを作成するには、device_create() でどのクラスを使用すればよいですか?

0 投票する
2 に答える
2053 参照

linux - デバイスを構成するために Linux カーネルが従うシーケンスは何ですか?

Linux Device Drivers 3rd Edition の The Linux Device Model に関連する章を読んで理解したように、新しいデバイスが構成されると、カーネル (2.6) は多かれ少なかれ次のシーケンスに従います。

  1. デバイスがドライバー コアに登録されている (device_register()デバイスの初期化を含む)
  2. kobject がデバイス モデルに登録されている
  3. sysfs にエントリを作成し、ホットプラグ イベントを引き起こします。
  4. バスとドライバーがチェックされ、どれがデバイスと一致するかが確認されます
  5. 調査
  6. デバイスはドライバーにバインドされています

私の主な疑問は、ステップ 1 で、いつdevice_register()呼び出され、どのフィールドがdevice構造体に既に設定されている必要があるかということです。

デバイスが接続されているバスから呼び出されますか? コードの例はありますか?

私は何か誤解しましたか?:)

0 投票する
1 に答える
2430 参照

linux-kernel - FIQ ハンドラから Linux C コードを呼び出す際の問題

私はarmv6コアに取り組んでおり、すべての作業を行うときにうまく機能するFIQハンドラーを持っています。ただし、FIQ メモリ領域に対して大きすぎる追加コードに分岐する必要があります。

FIQ ハンドラーは、登録時に fiq_start から fiq_end に、0xFFFF001C にコピーされます。

fiq_hander は次の関数に設定されます。

FIQ ハンドラーは通常のカーネル API の外部で動作し、かなり優先度の高い割り込みであるため、呼び出すものはすべて既にメモリにスワップされていることを確認する必要があります。これを行うには、fiq_flip_pins 関数を vmalloc を取得するモジュールとしてではなく、モノリシック カーネルで定義します。

fiq_flip_pins 関数に分岐せず、代わりに test_fiq_handler 関数で作業を行うと、すべてが期待どおりに機能します。現時点で問題を引き起こしているのは分岐です。分岐の直後に、ページング リクエストに関するカーネル パニックが発生します。ページング要求を受け取る理由がわかりません。

fiq_flip_pins はカーネル内にあります: c00307ec t fiq_flip_pins

私のコードには API 呼び出しがないため、C 呼び出しとその逆で何か問題が発生していると想定する必要があります。これを解決する助けをいただければ幸いです。

fiq_flip_pins のコメント付きのアセンブリは次のとおりです。

0 投票する
1 に答える
455 参照

linux-kernel - Hal が Linux デバイスを認識するには何が必要ですか?

Linuxカーネルのデバイスドライバーについて学習しようとしています。そのために、次の3つのモジュールを作成しました。

  • バスタイプ
  • デバイスドライバー
  • 今は何もしない偽のデバイスが登録されているだけです

バス、ドライバー、およびデバイスを作成するモジュールをロードできます。デバイスとデバイス ドライバーがバインドされていることを示すリンクを含め、すべてが sysfs に表示されます。

udevadm monitorまた、ドライバーとデバイスが読み込まれると、いくつかのイベントが発生することもわかります。

しかし、結局デバイスは hal に表示されません。hal に見えるようにするには、他に何が必要ですか?

0 投票する
2 に答える
103 参照

linux - 既存のソケットを失敗させる方法は?

わかった。したがって、これはネットワークプログラミングで誰もが尋ねるのとは正反対です。通常、人々は壊れたソケットを機能させる方法を尋ねます。一方、私はその反対を探しています。

私は現在、ソケットが正常に機能しているので、ソケットを壊して、この問題を再現してもらいたいと考えています。読み取りが正しくないために、意図的にソケットを失敗させる方法がわかりません。秘訣は次のとおりです。ソケットは機能し、確立された接続である必要があり、その後、何らかの理由で失敗する必要があります。

私はこれをCで書いていて、ドライバーはLinuxシステムで実行されています。ソケットは、LinuxデバイスドライバーによってLinuxの非IPレベル3プロトコルによって処理されます。私はすべてのコードベースに完全にアクセスできます。失敗する可能性があるように、コードベースを引き出す方法を見つける必要があります。

何か案は?

0 投票する
1 に答える
3707 参照

linux - Linuxのコンテキストスイッチで保存されるレジスタの状態は?

コンテキスト スイッチで保存されているレジスタを確認するには、Linux のどこを調べますか? たとえば、カーネル モード ドライバー コードで FP またはベクトル レジスタを使用しても安全かどうか疑問に思っています (主に x86-64 と ARM に関心がありますが、アーキテクチャに依存しない回答を期待しています)。