/ proc / sysと/ sys / modules / mod / parameter


10

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

モジュールのパラメーターは、/proc/sys/カーネルにハードに準拠しているだけですか?または、ローダブルカーネルモジュールのパラメータもあるでしょうか?

実行中のカーネルにロードされた後のLKMは、それらのパラメーターをで明らかにします/sys/modules/module/paraeter/params。カーネルにコンパイルされたモジュールにパラメーターがないということですか?

両方のディレクトリの違いは何ですか。

回答:


5

少しの間の関係がある/proc/sys/sysの両方がカーネルインターフェースと名前の一致があるという事実以外は。

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

/sys/module名前が示すように、カーネルモジュールへのインターフェイスです。各ディレクトリは、1つのカーネルモジュールに対応しています。にfoo書き込むことで、モジュールのパラメーターを読み取り、場合によっては変更できます/sys/module/foo/parameters/*

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


したがって、カーネルにコンパイルされたモジュールの場合、パラメーターはカーネルコマンドライン(/ proc / cmdlineなど)を介してのみ追加できます。実行時にそれらを変更する他の方法はありませんか?理解できましたか?では、これらのカーネル(構成)パラメーターとは正確には何でしょうか。私はそれらがカーネルにコンパイルされたいくつかのモジュールの変更可能なパラメーターであると思った
ast

@ast sysctlパラメータはDocumentation/sysctl/*.txt、Linuxカーネルのドキュメントに記載されています。これは、特定のカーネルにコンパイルされている機能やドライバーに関係なく、ほとんどが適用されるパラメーターのセットです。
Gilles 'SO-邪悪なことをやめなさい'

おかげで、私はこの関係を完全に理解しようとし、答えを見つけるために多くのものを読むのに3日間費やしました。
2013

3

Patrick Mochelによる論文「sysfs Filesystem/sysは、このボックスに収まるよりもはるかに優れた目的と歴史の概要を提供します。要約を引用する:

sysfsは、カーネルコードがメモリ内ファイルシステムを介してユーザープロセスに情報をエクスポートできるようにするLinux 2.6カーネルの機能です。ファイルシステムのディレクトリ階層の構成は厳密であり、カーネルデータ構造の内部構成に基づいています。ファイルシステムで作成されるファイルは、(通常)ファイルごとに1つの値を持つ(通常)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
…

私のシステムでは、73個のロード可能なモジュールのうち73個がに対応するエントリを持っていることを示しています/sys/module


特に/ sys / modules /に関する情報を見つけました。LKMは常に存在し、module_param(name、type、perm)はディレクトリパラメータの外観に影響を与えます。しかし、カーネルランタイムパラメータを設定できるsysctlと/ proc / sysについてはまだ質問があります。/ sys / modulesを使用できないのはなぜですか?カーネルでコンパイルされたモジュールのパラメーターを設定する場所(/ sys / modules /または/ proc / sys /にも)?多分私はカーネルオプションをモジュールパラメーターと混合します(それらは同じだと思いました)ので、sysctlを使用してモジュールパラメーターまたはいくつかのカーネル機能を設定する必要があります
ast
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.