/proc/sys および /sys/modules/mod/parameter

/proc/sys および /sys/modules/mod/parameter

数日間、それが正確にどのように機能するのか疑問に思いました。 sysctlを使用してカーネルランタイムパラメータを設定できますが、echo boolen 1> /proc/sys/module/exactParameter/sys/modules/module/parameters/parameterを設定することもできます。

モジュールのパラメータはカーネル/proc/sys/へのハードコンパイルにのみ関連していますか?それともカーネルモジュールをロードするパラメータもありますか?

LKMが実行されているカーネルにロードされます/sys/modules/module/paraeter/params。これは、カーネルにコンパイルされたモジュールにパラメータがないことを意味しますか?

2つのディレクトリの違いは何ですか?

答え1

どちらもカーネルインタフェースであり、名前が重なる点以外は、それらの間に/proc/sysほとんど関係がありません。/sys

/proc/sysインターフェイスですシステム制御、これはカーネル構成パラメーターです。読み取りまたは変更は、/proc/sys/foo/barsysctlの取得または設定と同じですfoo.bar。 Sysctl の値は意味カテゴリで構成され、本質的にカーネル構造とは関係ありません。多くのsysctl値は、コンパイルされたドライバや機能に関係なく、すべてのLinuxシステムに存在する設定です。一部はオプションの機能(特定のネットワークプロトコルなど)に関連していますが、特定のハードウェアデバイスとは関係ありません。

/sys/module名前が示すように、カーネルモジュールへのインタフェースです。各ディレクトリはカーネルモジュールに対応します。fooモジュールのパラメータに書き込んで読み取ることができ、時には修正することもできます/sys/module/foo/parameters/*

カーネルにロードされたコンポーネントは、カーネルコマンドラインから対応するパラメータを読み込みます。これらのパラメータは実行時に設定することはできません(少なくとも自動生成されたインターフェイスでは設定されません。たとえば、コンポーネントは/sys/moduleそれに対するカスタムインターフェイスを公開できます)。

答え2

紙」sysfs ファイルシステム/sysPatrick Mochelの「このボックスにあるよりも、その目的と歴史についてより良い理解を提供します。引用の概要:

sysfsは、カーネルコードがメモリ内ファイルシステムを介してユーザープロセスに情報をエクスポートできるようにするLinux 2.6カーネルの機能です。ファイルシステムディレクトリ階層の構成は厳密であり、カーネルデータ構造の内部構成に基づいています。ファイルシステムによって生成されたファイルは(ほとんど)ASCIIファイルであり、各ファイルは(通常)値を持ちます。これらの機能は、エクスポートされた情報が正確かつ簡単にアクセスできるようにし、sysfsを2.6カーネルの最も直感的で便利な機能の1つにします。

「ロード可能なカーネルモジュールがに表示されますか/sys?」という特定の質問に答えるには、「モジュール作成者がインターフェイスを提供している場合はい」です。これは、ロードされたモジュールの数を表示することによって行うことができます。/sys/module

$ lsmod | awk '{print $1}' | sort > /tmp/lsmod
$ cd /sys/module ; ls > /tmp/sysmodule
$ comm -12 /tmp/lsmod /tmp/sysmodule
ahci
arc4
ath
ath9k
ath9k_common
ath9k_hw
bluetooth
bnep
cfg80211

私のシステムでは/sys/module

関連情報