2016-09-04 3 views
0

私はいくつかのWeb検索を行ったが、デバイスノードに関連付けられたカーネルモジュールを取得するという結果しか得られなかった。とにかく、現在のシステムのルートデバイスと、該当する場合はルートデバイスの親デバイスのメジャー番号とマイナー番号を取得できますか(たとえば、/dev/sda/dev/sda2の「親」です)。カーネルはこれを取得するためにいくつかの関数をエクスポートしますか、間接的に取得する必要がありますか?カーネルモジュールでルートデバイスを取得する

答えて

0

デバイスノードに関連付けられているモジュールがありません。おそらく、あなたはルートディレクトリがプロセスのローカルなものであることを知っているかもしれません(プロセス構造はルートディレクトリのためのinode参照を格納します---これは特権を持つchroot(2)システムコールで変更できます)と現在の作業ディレクトリあなたのプロセスがchroot(2)システムコールを

  • なされていなかったので、あなたはopendir("/")してから実行します。

    を使用すると、ルートディレクトリの責任デバイスをお知りになりたい場合は、2つのオプションがあります)/で始まっていませんfstat(2)を入力してください(または、のstat(2)システムコールを実行することもできます)。ディレクトリ)。これにより、struct statst_devフィールドが返されるため、ルートディレクトリが存在するデバイスが返されます。 dev_tのようにフォーマットされ、ビットの一部がメジャー番号とマイナー番号を表します。 MKDEV(ma,mi)およびMAJOR(dev)およびMINOR(dev)のマクロを<linux/kdev_t.h>に定義して、メジャー番号とマイナー番号にアクセスできます。物理ディスクを取得するには、マイナー番号を0xf0でマスクし、ディスク全体のマイナー番号を取得します。

  • プロセスがchroot(2)システムコールを作成したため、システムの実際のルートディレクトリにアクセスすることができません。 /procファイルシステムにアクセスできる場合は、おそらくmount(1)コマンドを呼び出してマウントテーブルを取得できます。 /エントリのテーブルを検索し、/dev/sd<disk>エントリを取得することができます。デバイスを手に入れたら、親デバイスを手に入れるのは簡単です。最後のポイントと同じように番号をマスクして、物理ディスクのマイナー番号を取得することができます。

/proc/diskstatsファイルには、各ブロックデバイスの統計情報が表示されます。メジャー、マイナー、およびデバイス名は、各行の最初の3つのフィールドに表示されます。

NOTE

RAIDデバイスまたはボリュームマネージャディスクとして、パーティショニングを許可dont't一部のディスクarrangementesがあります。そのような場合には、物理​​ディスク(または複数のディスクが存在する可能性があるため)に移動することはより困難です。

+0

これは私の質問には答えません。 – Melab

関連する問題