問題タブ [printk]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - spin_lock_irqsave 内で printk を呼び出しても安全ですか?
私は次のようなコードを書きました:
非中断コンテキストにあります。
このコードを実行していますが、クラッシュが見られないため、安全に「見えます」。しかし、これが本当に安全なコードかどうかはわかりません。1/100000 の確率でシステム クラッシュを引き起こす可能性があるためです。
さらに、spin_lock_irqsave 内で "sleep" 関数を呼び出すことが安全かどうか (非割り込みコンテキストで) 知りたいです。
c - printk() がカーネルモジュールの init/exit メソッドでしか機能しないのはなぜですか? (プライオリティは問題ないはずです)
私の目標は、カーネル モジュールを作成することです。フリーソフトウェア マガジンのメモリ チュートリアルに従っています。
チュートリアルは問題なく動作します。コードをコンパイルできます。でロードするとinsmod
、カーネル<1>Inserting memory module
は期待どおりに出力されます。rmmod
カーネルを使用してモジュールを削除すると、<1>Removing memory module
.
デバッグの目的でprintk()
、他のメソッドに追加しようとしています。しかし、それらは決して印刷されません。
すべてのメッセージの優先度は です<1>
。
私は次の方法でデバイスに書き込みます:echo -n test1234 > /dev/memory
そしてcat /dev/memory
、データを取り戻すために使用します。
cat /var/log/messages
dmesg
もう情報を印刷しないでください
[ 5550.651221] <1>Inserting memory module
[ 5550.655396] <1>Inserting memory module !!!!!!!!!!!!!!!
[12230.130847] <1>Removing memory module
cat /proc/sys/kernel/printk
7 4 1 7
uname- a
Linux generic-armv7a-hf 3.14.0-163850-g775a3df-dirty #2 SMP Mon Jan 12 13:53:50 CET 2015 armv7l GNU/Linux
andメソッドprintk()
でのみ機能するのはなぜですか?init
exit
よりも変数値を出力する (より良い) 方法はありますprintk()
か?
ここにコード:
linux - Linuxカーネルprintkはメッセージをスキップできますか?
vprintk_emit
カーネルでメッセージを入れてlog_buffer
から印刷することがわかりますconsole_unlock->call_console_driver
。しかし、コンソール (UART) が実際に送信できるよりも多くのメッセージを送信する場合、どのような動作になりますか? メッセージを log_buffer に配置する近くにブロッキング プリミティブが見当たりません。つまり、log_buf の先頭にあるいくつかのメッセージを削除して、新しい (リング バッファ) を配置するということですか? では、printk メッセージが失われる可能性があるということですか? 私はカーネル4.1について話している
http://lxr.free-electrons.com/source/kernel/printk/printk.c#L1613
c - printk console_loglevel が minimum_console_loglevel よりも低くなる可能性があるのはなぜですか?
私のLinux
ディストリビューションはRHEL7
で、カーネルのバージョンは3.10.0
です。
printkドキュメントから、 minimum_console_loglevelの定義 を知っています。
- minimum_console_loglevel: console_loglevel を設定できる最小 (最高) 値
の現在のログ レベルを照会していますprintk
:
現在のコンソール ログ レベルを変更します。
私の理解では、minimum_console_loglevelは1
であるため、 console_loglevelを変更すると失敗する0
はずです。しかし、猫の出力から、それは成功のようです。
printk.c
コード から:
また、console_loglevel の値は変更すべきではないと思います。
arm - これらの printk が dmesg に表示されないのはなぜですか?
.S ファイルにいくつかのデバッグ メッセージを提供しましたが、dmesg 出力に表示されることを期待していました。
以下はスニペットです:
KVM ゲストを起動した後、PRINTK が dmesg に出力されるはずだと思っていましたが、表示されませんでしたか?