1

や などtcp_frtoのコマンドを使用してユーザー空間からアクセスできるカーネル変数 (例: ) がいくつかあります。sysctl net.ipv4.tcp_frtocat /proc/sys/net/ipv4/tcp_frto

これは、bash コマンド ラインから読み取り、簡単に変更できます。しかし、私が書いているカーネルモジュールからそれらを変更したいのです。

モジュールからこれらの変数を読み書きするにはどうすればよいですか?

(Linuxソースコードはsysctl_tcp_frto、ファイルで宣言されたこの変数にアクセスするために使用しtcp.hます。変数名をエクスポートして、モジュールで見つけることができるかもしれませんが、ソースを変更して再度コンパイルしたくありません)。毎回ソースをコンパイルせずにローダブル カーネル モジュール (LKM) を作成しようとしています。

4

1 に答える 1

1

Linux カーネル変数が (EXPORT_SYMBOLまたはそのバリアントの 1 つを使用して) グローバルにされない限り、そのスコープ外で読み取ることはできません。

procfstcp_frtoを使用してアクセスする代替手段があるため、これらのサンプル コード スニペットに示すように、Linux カーネル モジュール内から VFS 関数を使用して同じことを行うことができます。

これがどのように機能するか、および一般的に (デバッグを除いて) お勧めできない理由については、この記事で詳しく説明しています。

于 2013-08-11T05:46:33.153 に答える