5

カーネルモジュールでシェルコマンドを実行することは可能ですか? systemサブルーチンを使用して、ユーザー空間の C コードで実行できることを知っています。
メモリ リークの問題があるカーネル モジュールをデバッグしています。insmod と rmmod module.ko を無限ループで実行した後、システムは 8G RAM で数分以内にメモリ不足になります。メモリを解放する API の呼び出しの前後にコマンド
を使用してメモリの状態を知ると、API が機能しているかどうかを知ることができます。 これが私がデバッグしている方法です。他の方法があれば共有してください。free

4

3 に答える 3

9

関数を使用できcall_usermodehelperます。LXR#1またはLXR#2での使用方法の例を参照してください。

UPD:

argv[0] = "/bin/bash";
argv[1] = "-c";
argv[2] = "/usr/bin/free";
argv[3] = NULL;

envp[0] = "HOME=/";
envp[1] = "TERM=linux";
envp[2] = "PATH=/sbin:/usr/sbin:/bin:/usr/bin";
envp[3] = NULL;

call_usermodehelper(argv[0], argv, envp, UMH_WAIT_EXEC);
于 2012-06-26T20:48:57.543 に答える
6

カーネル モジュールでシェル コマンド実行することはできません。カーネル モジュール内のコードによってコマンドが実行される可能性がありますが、通常のユーザー プロセスで実行されます。

freeカーネルのメモリ リークにはほとんど役に立ちません。
カーネル コードですべての割り当てと解放をラップし、割り当てられたメモリのカウンターを維持する方がはるかに優れています。

于 2012-06-25T18:02:57.153 に答える
1

カーネル内からシェル コマンドを実行することはできません。代わりに、適切な procfs API を呼び出して /proc/meminfo ファイルを読み取ることにより、/proc/meminfo ファイルを読み取ることができます。その仮想ファイルには、システム メモリに関する有用なメモリ統計があります。

于 2012-06-26T22:58:12.897 に答える