我正在运行嵌入式Linux(Angstrom distribution,for Atmel)。我想在关机期间阅读内核消息日志,与dmesg一样。基本上我通过在内核代码中插入printk()来探索一些问题,现在我想看看他们的输出。LInux内核日志
我发现日志不会在系统启动时自动启动(我怎么能?),并且我无法使用klogd命令获取任何内容。
我正在运行嵌入式Linux(Angstrom distribution,for Atmel)。我想在关机期间阅读内核消息日志,与dmesg一样。基本上我通过在内核代码中插入printk()来探索一些问题,现在我想看看他们的输出。LInux内核日志
我发现日志不会在系统启动时自动启动(我怎么能?),并且我无法使用klogd命令获取任何内容。
如果klogd启动太迟或停止得太早以至于无法看到您的消息,也许您可以试试Netconsole?
当然,如果您有嵌入式主板的网络访问权限。这个模块很容易配置,过去我已经成功使用了它几次。 请注意,如果您希望能够在引导过程的早期/晚期看到消息,则必须在内核(使用以太网驱动程序)内编译它,而不是作为模块进行编译。
此外,检查您的默认日志级别使您的printk()进行显示(日志等级=内核引导参数)
的可信赖的RS232串行控制台可能是你在像这些情况的朋友。
除非您已经采取措施禁用它,否则内核日志消息几乎肯定会在那里找到它们。
不同的发行版可能会将/ proc/kmsg的输出重定向到任何他们喜欢的物理日志文件或虚拟设备(/ dev/xxx)。但“的/ proc/kmsg”是核心日志的原始最终来源,因为内核真正实现了环行缓冲器动作里面FS的/ proc/kmsg.c:
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?
所以你怎么看到的输出是这样的:
须藤尾-f的/ proc/kmsg
而且你只能看到所有消息根儿在你发出这个命令之后 - 在环形缓冲区中以前的所有消息都不会被打印出来。所以看到物理文件输出,可以搜索 “的/ proc/kmsg” 的用户:
须藤lsof的| grep的proc.kmsg
和我的机器表示这样的:
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,让我们来看看这些文件FD由1743打开:
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/lo g/kern.log等
嗨@stef,请你试试'cat/var/log/messages'或'cat/var/log/kern.log'? –
我还没有那些文件,这里有我想要创建的文件。 – stef
显然angstrom不会将日志存储在平常的地方,我也很难找到任何信息。能够尾巴-f或旋转日志会很好...... – gcb