2012-05-03 7 views
0

私はLinuxにはかなり新しいので、カーネルモジュールプログラミングに関するいくつかの質問があります。私はubuntuとCを使って自分の.koファイルを作っています。プログラム/ aが呼び出されるたびに/ aの代わりにprogram/bを実行するモジュールを作ろうとしています。任意のヒント?プログラムaが呼び出されるたびにプログラムbを実行するカーネルモジュールを書くにはどうすればいいですか?

また、printk(KERN_EMERG ...)を使用しても、端末には印刷されません。私が行方不明になっている設定ですか、またはubuntuはそれをしないのですか?

ありがとうございます!

答えて

1

コンソールに出力するレベルを制御する/proc/sys/kernel/printkの設定を試す必要があります。 proc(5)から:nice(2)値のように、値は高い優先順位を持って、

/proc/sys/kernel/printk 
      The four values in this file are console_loglevel, 
      default_message_loglevel, minimum_console_level, and 
      default_console_loglevel. These values influence 
      printk() behavior when printing or logging error 
      messages. See syslog(2) for more info on the 
      different loglevels. Messages with a higher priority 
      than console_loglevel will be printed to the console. 
      Messages without an explicit priority will be printed 
      with priority default_message_level. 
      minimum_console_loglevel is the minimum (highest) 
      value to which console_loglevel can be set. 
      default_console_loglevel is the default value for 
      console_loglevel. 

注意。

/foo/bを実行するためのパス/foo/aためexecve()を作るための最も簡単な方法は、/foo/aの上に/foo/bをバインド・マウントすることです:

mount -obind /foo/b /foo/a 

ませカーネルモジュールは必要ありません。

この同じタスクをカーネルモジュールで実行すると、かなり多くの作業が必要になります。 LSMインターフェースは、ターゲットがいつ実行されているかを把握するのに役立つ情報を提供します。出発地点をお探しの場合は、do_execve()fs/exec.cが読書を開始する場所です。 ctagsをインストールして実行して、エディタのctags統合を使用する方法を理解しておくと、コードを読みやすくすることができます。

0

回答約printk
端末ではなくコンソールに印刷されます。しかし、コンソールは何ですか?
TTYは/proc/cmdlineにあります。通常はtty0です。これは画面がコンピュータに接続されていることを意味します。
SSH/TELNET経由で接続する場合は、必ず表示されません。
グラフィカル環境(Gnome/KDE)で作業している場合、テキストモードTTYに切り替えるには、alt-F1/F2のようなものが必要な場合があります。

dmesgコマンドを使用してメッセージを表示することもできます。

関連する問題