未知のハードウェアバグを修正しようとしている間、誰かがカーネルにいくつかのパラメータを追加すると問題を解決できることが示唆されました。
確かにできますが、実行中のカーネルにこれらの変更を適用することが可能かどうかを知りたいです。特に、私はこれを知っていて、実行中のカーネルを変更する方法をprocfs
提供しsysfs
ますが、カーネルパラメータ名をファイルパスにマップする方法がわかりません。 (私でもないと思います。みんな設定は実行時に変更される可能性があり、システムが起動した後にこれらの特定のパラメータを設定できないことがあります。 )
私が興味のある特定のパラメータは次のとおりです。
i8042.nomux=1 i8042.reset
実行中のシステムでリセットコマンドを実行できるかどうかはわかりません。
これらのパラメータの場合はい実行時に調整できます。どこで見つけることができますか?
答え1
カーネルパラメータと呼ぶことができるのは3つあります。
核兵器カーネルパラメータカーネルコマンドラインに渡されるオプション。起動時にのみ配信できます。彼らはに記録されていますkernel-parameters.txt
(このファイルにはモジュールパラメータもリストされています。コアカーネルパラメータはないパラメータです。.
)これらのパラメータの一部は起動時にのみ重要です(例root
:)。実行時にこれを変更するメカニズムがある場合とない場合があります。システム寿命全体にわたって使用されるメカニズムに関する一般的な規則はありません。
モジュールパラメータカーネルパラメータと似ていますが、カーネルの特定のコンポーネント(通常は特定のドライバ)を指定します。名前に関係なく、これらのパラメーターは、ドライバーがカーネルから直接コンパイルされるかモジュールにコンパイルされるかに応じて適用されます。コンポーネントがデフォルトのカーネルイメージに含まれている場合は、COMPONENT_NAME.PARAMETER_NAME=VALUE
カーネルコマンドラインを渡す必要があります。コンポーネントがモジュールPARAMETER_NAME=VALUE
にロードされたらinsmod
。
いくつかのモジュールパラメータを渡すことができます。システムファイルシステム。このディレクトリには、/sys/module/MODULE_NAME/parameters
各パラメータごとに1つのファイルが含まれています。このファイルを読み取ると、パラメータの現在の値を取得できます。このファイルに書き込むと、パラメータを変更できる場合に設定されます。ほとんどのパラメータは変更できません(したがってファイルは読み取り専用です)。このディレクトリには、/sys/module/kernel/parameters
いくつかのコアカーネルパラメータがリストされています。
モジュールパラメータは任意に文書化されており、そのいくつかはにリストされており、このファイルにはいくつかのモジュールへkernel-parameters.txt
の参照が含まれています。文書が見つからない場合、ソース検索。モジュールパラメータは次のように宣言されます。module_param
マクロまたはその同僚の1つなど、module_param_named
このmodule_param_cb
マクロの最後のパラメータはファイル権限を決定します(つまり0600
、rootは読み書きS_IRUSR | S_IWUSR
できますが、他の人はアクセスできません)。rw-------
権限が0の場合、エントリはsysfsにまったく表示されません。
i8042.nomux
そしてi8042.reset
パラメータですi8042
ドライバー。ソースコードを見ると、権限はすべて0なので、これら2つのパラメータは実行時に変更または照会することはできません。パラメータは、ドライバの起動後にのみ設定できます。ドライバがモジュールにコンパイルされている場合は、モジュールをアンロードして再ロードすると、再ロード時に他のパラメータを提供できます。ドライバがカーネルに直接配置されている場合、またはシステムが実際にモジュールをアンロードできないように設定されている場合は、再起動が必要です。
最後に、カーネルの別のパラメータは次のとおりです。システム制御。これらの設定は、次のコマンドを使用して確認および変更できます。sysctl
注文するあるいは、.sysctlと/proc/sys
カーネルパラメータの間の区別はほとんど歴史的だと思います。ハードウェア関連の設定は伝統的にカーネルパラメータであり、ソフトウェア関連の設定は伝統的にsysctlですが、時には区別があいまいになることがあります。
答え2
実行時に変更できるパラメータのリストは、「sudo sysctl -a」コマンドを使用して見つけることができるようです。システムに i8042.nomux が表示されません。なぜか分からない。たぶんあなたはそれを確認し、そのパラメータが表示されたら実行時に修正することができます。