问题标签 [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.

0 投票
2 回答
9803 浏览

logging - 如何避免 Linux 内核中的 printk 日志丢失

是否有任何提示或方法可以避免内核日志丢失或日志缓冲区溢出?

通过以下代码更改,我已将日志缓冲区大小增加到最大值。我只在高端设备上运行。但是,当我想从我的驱动程序(写入大量日志)获取完整日志时,我看到 printk 日志有时会被丢弃。我使用带有 KERN_INFO 的 printk,通过动态调试(dprintk)启用。

我做的改变:

我用来写入文件的命令:

仅在调试时,如果驱动程序的性能下降,我可以,但是我不想删除任何日志。我知道我们不能让工作队列/线程等到打印完成。但是,仍然有任何方法可以保证日志不会被丢弃。

0 投票
1 回答
2808 浏览

linux - 在 spin_lock_irqsave 中调用 printk 是否安全?

我写了一个类似这样的代码:

它在非中断上下文中:

我正在运行此代码并且“看起来”很安全,因为我没有看到任何崩溃。但是,我不确定这是否真的是一个安全的代码。因为这可能会以 1/100000 的概率触发系统崩溃。

此外,我想知道在 spin_lock_irqsave 中调用“sleep”函数是否安全(在非中断上下文中)。

0 投票
1 回答
10144 浏览

logging - 将 Linux 内核日志缓冲区扩大到 2M 以上

我正在收集某种 Linux 内核活动。我printk在内核源代码中放置了多个语句,并希望在常规内核活动期间监视这些语句。不幸的是,我意识到内核日志缓冲区大小 ( CONFIG_LOG_BUF_SHIFT) 不能超过 2^21,这基本上等于 2M 条目。

有没有其他方法可以记录超过 2M 的内核消息?

0 投票
3 回答
11066 浏览

linux - 如何在控制台中显示 printk() 消息?

printk( )打印出来的信息只能在Alt++ ~控制台下看到。这些控制台无法回滚,因此非常不方便调试。我正在使用 KDE 桌面环境和控制台终端,如何将 printk() 消息重定向到控制台?CtrlF1F7

0 投票
1 回答
821 浏览

c - 为什么 printk() 只在内核模块的 init/exit 方法中起作用?(优先级应该没问题)

我的目标是编写一个内核模块。我正在关注freesoftware 杂志的内存教程。

该教程工作正常。我能够编译代码。加载时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

为什么printk()只在initandexit方法中起作用?

有没有(更好的)方法来打印变量值printk()

这里的代码:

0 投票
2 回答
6931 浏览

linux-kernel - 如何在 Linux 内核中单行打印一条消息

我正在内核中制作一个简单的 enque/deque 程序。我想在内核中打印消息,这就是我得到的:

但我想在没有换行符的情况下打印它:

这是我的代码的一部分:

简而言之,我想在内核中打印一行消息。但是如果我使用 printk,它会自动换行。如何在一行中打印一条消息?

0 投票
1 回答
609 浏览

console - 如何将 printk 消息发送到 ttyS0?

我正在尝试使用笔记本电脑和串行端口调试我的 PC。

所以,我想从连接 tty 的笔记本电脑上获取一些 printk 日志。

我提到了这个网站(https://help.ubuntu.com/community/SerialConsoleHowto),我已经在我的笔记本电脑上设置了所有控制台设置,我还看到了笔记本电脑的登录会话。

然而,尽管我付出了所有努力,我还是无法在 tty 控制台上获取 printk 日志消息(我还将 /proc/sys/kernel/printk 设置为 7417 以获取 printk 的所有消息)。

奇怪的是,我的本地控制台(ctrl + alt + f1~f6)同时打印 printk 日志。

那么,如何从 tty 连接的主机设备获取 printk 消息?

谢谢,

0 投票
0 回答
217 浏览

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

0 投票
1 回答
1215 浏览

c - 为什么 printk console_loglevel 会低于 minimum_console_loglevel?

我的Linux发行版是RHEL7,内核版本是3.10.0.

形成printk文档,我知道minimum_console_loglevel定义:

  • minimum_console_loglevel:console_loglevel 可以设置的最小(最高)值

查询当前日志级别printk

修改当前控制台日志级别:

据我了解,minimum_console_loglevel1,因此将console_loglevel修改为0应该失败。但从cat输出来看,似乎成功了。

printk.c代码:

我也认为console_loglevel值不应该被修改。

0 投票
0 回答
146 浏览

arm - 为什么这些 printk 没有出现在 dmesg 中?

我在 .S 文件中提供了一些调试消息,并希望它出现在 dmesg 输出中。

以下是片段:

启动 KVM 来宾后,我期待 PRINTK 应该在 dmesg 中打印。但它没有出现?