
数日間、それが正確にどのように機能するのか疑問に思いました。 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/bar
sysctlの取得または設定と同じですfoo.bar
。 Sysctl の値は意味カテゴリで構成され、本質的にカーネル構造とは関係ありません。多くのsysctl値は、コンパイルされたドライバや機能に関係なく、すべてのLinuxシステムに存在する設定です。一部はオプションの機能(特定のネットワークプロトコルなど)に関連していますが、特定のハードウェアデバイスとは関係ありません。
/sys/module
名前が示すように、カーネルモジュールへのインタフェースです。各ディレクトリはカーネルモジュールに対応します。foo
モジュールのパラメータに書き込んで読み取ることができ、時には修正することもできます/sys/module/foo/parameters/*
。
カーネルにロードされたコンポーネントは、カーネルコマンドラインから対応するパラメータを読み込みます。これらのパラメータは実行時に設定することはできません(少なくとも自動生成されたインターフェイスでは設定されません。たとえば、コンポーネントは/sys/module
それに対するカスタムインターフェイスを公開できます)。
答え2
紙」sysfs ファイルシステム/sys
Patrick 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
。