4

Rubini による本LDD3のセクションの下でprintk、著者はメッセージにログレベル/優先度を与えることができると述べています。しかし、異なるログレベルのprintksを持つ単純なモジュールプログラムを試してみましたが、プログラム内にprintkメッセージを書いたのと同じ順序を示しています。優先度に従って印刷されないのはなぜですか?

ここにコードをコピーしました

  #include<linux/module.h>
  #include<linux/kernel.h>
  static __init int log_init(void)
     {
         printk(KERN_INFO"inside init 4 \n");
         printk(KERN_ERR"inside init 3\n");
         printk(KERN_CRIT"inside init 2\n");

         return 0;
     }
  static __exit void log_exit(void)
    {
        printk("inside exit\n");
    }
  module_init(log_init);
  module_exit(log_exit);

  MODULE_LICENSE("GPL");

そして、次のような出力を得ました

[ 1508.721441] inside init 4 
[ 1508.721448] inside init 3
[ 1508.721454] inside init 2
root@jitesh-desktop:~/DD/debug/print#

だから私はどのように優先度に従ってそれを印刷することができますか

init 2
init 3
init 4
4

1 に答える 1

11

printk優先順位の目的を混乱させています。ここで希望するように、実行順序を変更することを意図したものではありません。

さまざまなカーネル メッセージにさまざまな優先順位を割り当てることで、カーネル コマンド ラインから適切な値を指定することで、コンソールに表示される目的のメッセージを除外できますloglevel。たとえば、Linux カーネルでは . 優先度の高いメッセージが多数ありますKERN_DEBUG。これらは単なる通常のデバッグ メッセージです。したがってloglevel、最大 7 まで有効にすると、コンソールに大量のメッセージが表示されます!! そして、重大なエラーや警告は、この通常のデバッグ メッセージの下に埋もれてしまいます。

したがって、重大な問題をデバッグする場合は、loglevelを低い値に指定して、重大なエラーと警告のみがコンソールに表示されるようにすることができます。

: に関係なくloglevel、すべてのprintkメッセージはカーネル バッファーに格納されます。優先度によって、どれがコンソールに送られるかが決まります。

于 2012-06-28T10:24:01.927 に答える