0

私は Linux カーネル開発に不慣れで、timekeep.c ファイルに printk 関数を追加するだけでシステム コール関数を変更しようとすると、次のようになります。

 printk("BEGIN!$$$$$\n");

dmesg ユーティリティを使用すると、次のような出力が得られます。

[   75.919335] BEGIN!$$$$$
[   75.919337] BEGIN!$$$$$
[   75.919340] BEGIN!$$$$$
[   75.919343] BEGIN!$$$$$
[   75.919347] BEGIN!$$$$$
[   75.919349] BEGIN!$$$$$
[   75.919353] BEGIN!$$$$$
[   75.919355] BEGIN!$$$$$
[   75.919358] BEGIN!$$$$$
[   75.919361] BEGIN!$$$$$
[   75.919364] BEGIN!$$$$$
[   75.919367] BEGIN!$$$$$
[   75.919370] BEGIN!$$$$$
[   75.919374] BEGIN!$$$$$

[] 内のものがどのように生成されるのか、よくわかりません。誰かが私にそれについてのヒントを教えてもらえますか?

4

2 に答える 2

2

カーネルで CONFIG_PRINTK_TIME オプションが有効になっています。このオプションは、printk()メッセージの前にこのタイムスタンプ フィールドを担当します。カーネル構成オプションから

 "Selecting this option causes time stamps of the `printk()` messages to be
  added to the output of the `syslog()` system call and at the console."

ソース: https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/lib/Kconfig.debug#n2

このオプションは、「Kernel Hacking」構成フィールドを介して、カーネル構成時に構成可能です。また、カーネル コマンド ライン パラメーターprintk.time=0(無効) またはprintk.time=1(有効) から有効/無効にできます。

于 2013-05-27T16:27:09.183 に答える
0

これらは実際にはdmesg、システムが起動してからの秒単位のタイムスタンプです。

実際にタイミングの問題を探している場合(ドライバがもっと速くすべきことを 30 秒かかるなど) を探しているのでない限り、無視しても問題ありません。

より読みやすい形式が必要な場合は、使用できますdmesg -Tが、精度がいくらか失われます。

pax> dmesg -T | tail -5l

[Mon May 27 09:08:58 2013] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[Mon May 27 09:09:00 2013] usblp0: removed
[Mon May 27 09:09:00 2013] usblp0: USB Bidirectional printer dev 3 if 0 alt 0 proto 2 vid 0x03F0 pid 0x3A02
[Mon May 27 09:09:09 2013] eth0: no IPv6 routers present
[Mon May 27 10:09:59 2013] usblp0: removed

でそれらを完全に削除することもできますが、すべてのタイミング情報dmesg -tが失われます。

pax> dmesg -t | tail -5l

ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
usblp0: removed
usblp0: USB Bidirectional printer dev 3 if 0 alt 0 proto 2 vid 0x03F0 pid 0x3A02
eth0: no IPv6 routers present
usblp0: removed
于 2013-05-27T02:40:22.730 に答える