問題タブ [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-kernel - Linux - プログラムで proc ファイルに書き込む
procファイルを作成し、procファイルが読み取りまたは書き込みのために開かれるたびに呼び出される読み取りおよび書き込みメソッドを割り当てることができるいくつかの例をオンラインで見つけました。
ただし、プログラムでprocファイルに書き込む方法に関するドキュメントが見つからないようです。理想的には、proc ファイルが読み取りまたは書き込み用に開かれるたびに、タイムスタンプを他のユーザーの詳細と共に追加したいと考えています。繰り返しになりますが、proc ファイルが開かれたときにトリガーされる読み取り関数と書き込み関数を追加できる場所を見つけましたが、実際にプログラムで proc ファイルに書き込む方法に関するドキュメントは見つかりません。これは、通常の IO 読み取り/書き込みとは異なりますよね?
linux-kernel - Linux カーネル - 整数から ASCII へ
Linuxカーネル内から整数をASCII表現に変換する必要があります。これどうやってするの?組み込みの変換メソッドが見つかりません。カーネルには既に存在しますか、それとも独自に追加する必要がありますか?
linux-kernel - Linux カーネル - 最後に書き込まれたメモリ ブロックを取得する
Linux カーネルでは、パーティションの最後に書き込まれたブロック番号を常に自動的に保持するデータ構造はありますか? この情報を取得するために使用できる組み込みのカーネル ソースが見つかりません。どんな助けでも大歓迎です。
linux - Linux カーネルモジュール `init()` の問題をデバッグするには?
リモート (k)gdb を使用してモジュールの問題をデバッグしています。この問題は、ロード時init()
に呼び出されたときにパニックを引き起こします。
スタック トレースは、それdo_one_initcall(mod->init)
がクラッシュの原因であることを示しています。シンボル ファイルを gdb に読み込むには、モジュール テキスト セクションのアドレスを取得する必要があります。これを取得するには、モジュールを読み込む必要があります。
insmod
in busybox (1.16.1) がサポートされていないため、アドレスを把握するために+ からのオフセットを追加することに-m
固執しています。grep modulename /proc/modules
nm
したがって、私はここで一種のニワトリと卵の問題に直面しています-モジュールのロードをデバッグできるようにするには、モジュールをロードする必要があります-しかし、モジュールをロードするには、問題をデバッグする必要があります。 ..
だから私は現在2つのオプションについて考えています - アドレス情報を取得する方法はありますか:
- モジュールの初期化コードの printk() による
- カーネルコードのどこかで printk() によって
これらすべてを呼び出す前にmod->init()
-ブレークポイントをそこに配置し、シンボルファイルをロードし、ヒットcしてクラッシュして燃焼するのを確認できます...
linux-kernel - Linux カーネル - 特定のディスク パーティションに物理的に書き込まれるデータ ブロックは、カーネル内のどこにありますか?
Linux カーネルを変更していて、データのカーネル ソース ブロックが ubd0 などのディスク パーティションに物理的に書き込まれている場所を見つけようとしています。これはカーネルソースのどこで発生しますか? 実際の物理的な書き込み呼び出し? 私はこれを見つけることができません。ありがとう!
編集: 最終目標は、いくつかの異なるパーティションに書き込まれたブロック番号のリストです。データがリストに物理的に書き込まれると、書き込まれたブロック番号が返されて保持されます。
android - Android とカーネル モジュール
つまり、Android は機能を取り除いた Linux システムの上に構築されています。便利なユーティリティのほとんどはありませんが、基本的なものはすべて揃っています。
insmod と rmmod を呼び出すことができます。問題ない。
しかし、カーネルモジュールとファームウェアファイルはどこにあるのでしょうか? 何も見つかりません。標準ディストリビューションには /lib/modules はありません。
問題: モジュールが必要です。確かに、世界中のすべてのUSBデバイスのサポートをLinuxカーネルにコンパイルしたくありません。それらをどこに置くべきですか?
linux-kernel - Linux カーネル - バッファ ヘッドへのトラバース
Linux カーネルで、モジュール内から buffer_heads までトラバースする方法はありますか?
struct bio (task_struct マクロ: current->bio) に到達する方法を確認できます。しかし、どうすればバッファ ヘッドに到達できますか? buffer_head 構造体には、物理ブロック番号に関して任意の時点で取得したい情報が保持されます。
c - カーネル経由でブロック レベル ストレージにアクセスする
カーネル経由でブロック レベルのストレージにアクセスする方法 (scsi ライブラリを使用しない場合)?
私の意図は、SCSI が機能するのとほぼ同じように、学習目的でネットワーク上にブロック レベルのストレージ プロトコルを実装することです。要求はイニシエーターによって生成され、カーネル モジュールを呼び出して、TCP プロトコルを使用してデータをイニシエーターに返すターゲット (両方のユーザー空間プログラム) に送信されます。
これまでのところ、単純な「Hello」モジュールを作成して実行することができましたが (カーネル プログラミングは初めてです)、ブロック アクセスを続行できません。
いろいろ検索したところ、 で見つかりましstruct buffer_head * bread(int dev,int block)
たlinux/fs.h
が、コンパイラがエラーをスローします。
助けてください。また、カーネルプログラミングを始める際のアドバイスもお気軽に。
ありがとうございました!
bread
古いカーネルで使用されているように。
struct request *blk_get_request(struct request_queue *, int, gfp_t);
中をのぞくlinux/blkdev.h
ブロック デバイスへのアクセスは、カーネル経由で行う必要があります。
gcc - カーネル モジュールの構造体からパディングを削除する
標準コマンドを使用して、サイズ 34 の構造体を含むカーネル モジュールをコンパイルしています。
sizeof(some_structure)
34 ではなく 36 として表示されます。つまり、コンパイラが構造体をパディングしています。
このパディングを削除するにはどうすればよいですか?
実行make V=1
すると、渡された gcc コンパイラ オプションが表示されます。
linux-kernel - inode_operations、警告:互換性のないポインタ型からの初期化
procファイルから読み書きする単純なカーネルプログラムをコンパイルしようとしています。
inode_operations構造体(.permission)のパーミッションfpをオーバーライドして、そのファイルにパーミッションを設定しようとしています。
{。。。}
};
何らかの理由で、これをコンパイルすると、次の行に->警告:互換性のないポインタタイプからの初期化が表示されます。
これを解決する方法はありますか?
ありがとう!