首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LInux内核日志

LInux内核日志
EN

Stack Overflow用户
提问于 2012-10-03 05:11:14
回答 3查看 6.6K关注 0票数 1

我运行的是嵌入式Linux (用于Atmel的Angstrom发行版)。我想在关机期间读取内核消息日志,这与我使用dmesg得到的内容相同。基本上,我通过在内核代码中插入printk()来探索一些问题,现在我想看看它们的输出。

我发现当系统启动时,日志不能自动启动(我怎么能?)并且我无法使用klogd命令获取任何内容。

EN

回答 3

Stack Overflow用户

发布于 2012-10-03 15:59:47

如果klogd启动得太晚或者停止得太早,以至于你看不到你的消息,也许你可以尝试一下Netconsole

当然,前提是您可以通过网络访问您的嵌入式主板。这个模块很容易配置,过去我已经成功地使用过几次了。请注意,如果您希望能够在引导过程的早期/后期看到发出的消息,则必须在内核中(使用以太网驱动程序)对其进行编译,而不是将其作为模块。

此外,检查默认日志级别允许显示printk() (loglevel=内核引导参数)

票数 0
EN

Stack Overflow用户

发布于 2012-10-07 02:47:31

在这种情况下,值得信赖的RS232串行控制台可能是您的好朋友。

除非您已经采取措施禁用它,否则内核日志消息几乎肯定会找到它们的方式。

票数 0
EN

Stack Overflow用户

发布于 2015-12-11 08:41:57

不同的发行版可以将/proc/kmsg的输出重定向到他们喜欢的任何物理日志文件或虚拟设备(/dev/xxx)。但是"/proc/kmsg“是内核日志的原始最终来源,因为内核实际上在fs/proc/kmsg.c中实现了它的环缓冲区操作:

代码语言:javascript
复制
static const struct file_operations proc_kmsg_operations = {
        .read           = kmsg_read,
        .poll           = kmsg_poll,
        .open           = kmsg_open,
        .release        = kmsg_release,
        .llseek         = generic_file_llseek,
};

下面是更多信息:

How to read ring buffer within linux kernel space?

所以你看到的输出是这样的:

sudo tail -f /proc/kmsg

而且,您只能看到发出此命令后生成的所有消息--环形缓冲区中以前的所有消息都不会打印出来。因此,要查看物理文件输出,可以搜索用户"/proc/kmsg":

sudo lsof |grep proc.kmsg

我的机器显示:

代码语言:javascript
复制
rsyslogd  1743               syslog    3r      REG                0,3          0 4026532041 /proc/kmsg
in:imuxso 1743 1755          syslog    3r      REG                0,3          0 4026532041 /proc/kmsg
in:imklog 1743 1756          syslog    3r      REG                0,3          0 4026532041 /proc/kmsg
rs:main   1743 1757          syslog    3r      REG                0,3          0 4026532041 /proc/kmsg

现在它是pid 1743,让我们看看1743打开的文件fd:

代码语言:javascript
复制
sudo ls -al /proc/1743/fd

lrwx------ 1 root   root   64 Dec 11 08:36 0 -> socket:[14472]
l-wx------ 1 root   root   64 Dec 11 08:36 1 -> /var/log/syslog
l-wx------ 1 root   root   64 Dec 11 08:36 2 -> /var/log/kern.log
lr-x------ 1 root   root   64 Dec 11 08:36 3 -> /proc/kmsg
l-wx------ 1 root   root   64 Dec 11 08:36 4 -> /var/log/auth.log

现在,pid 1743是rsyslogd,它将/proc/kmsg的输出重定向到/var/log/syslog和/var/log/kern.log等文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12698386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档