我正在尝试解决linux printk()消息的问题(Linux raspberrypi 3.6.11+#87 PREEMPT Fri Feb 7 00:17:11 CET 2014 armv6l GNU / Linux)。<登记/> 我所拥有的是一个内核模块,它从 struct file_operations 实现 unlocked_ioctl 功能。当我从指定了 cmd = CMD_PRINTK 的用户空间调用此函数时,将执行以下代码:
case CMD_PRINTK:
{
printk(KERN_EMERG "TEST KERN_EMERG\n");
printk(KERN_ALERT "TEST KERN_ALERT\n");
printk(KERN_CRIT "TEST KERN_CRIT\n");
printk(KERN_ERR "TEST KERN_ERR\n");
printk(KERN_WARNING "TEST KERN_WARNING\n");
printk(KERN_NOTICE "TEST KERN_NOTICE\n");
printk(KERN_INFO "TEST KERN_INFO\n");
printk(KERN_DEBUG "TEST KERN_DEBUG\n");
}
我所期待的是显示的消息量将取决于
的第二个值root@raspberrypi:/mnt/raspberrypi/linux/linux/mod# *cat /proc/sys/kernel/printk*
7 **4** 1 7
但我观察到的只是第一条消息“TEST KERN_EMERG \ n”,它是由syslogd btw在每个虚拟终端上打印的(pts / 1 ...)
在内核命令行中,我将控制台指定为 tty1
root@raspberrypi:/mnt/raspberrypi/linux/linux/mod# *cat /proc/cmdline*
dma.dmachans=0x7f35 bcm2708_fb.fbwidth=1824 bcm2708_fb.fbheight=984 bcm2708.boardrev=0x3 bcm2708.serial=0xf8900c76 smsc95xx.macaddr=B8:27:EB:90:0C:76 dwc_otg.lpm_enable=0 **console=/dev/tty1** root=/dev/nfs nfsroot=192.168.1.102:/home/borys/rpi_rootfs ip=192.168.1.103:192.168.1.102:192.168.1.1:255.255.255.0:rpi:eth0:off rootfstype=nfs
我尝试使用 minicom 连接到 / dev / tty1 ,但我仍然无法观察到那里显示的任何消息。
我试图杀死 syslogd ,但它没有帮助。
目前我认为我对虚拟终端并不了解。我设置了STLinux平台和控制台指定为串口( / dev / ttyAS0 ),我能够从我的主机连接串行电缆,我看到所有 printk()消息。
有人可以解释如何通过 minicom 连接在虚拟终端中显示内核 printk()消息吗?
有可能吗?
是否可以控制 printk()消息的详细程度呢?
更新时间:05.05.2014
我的同事在我的cmdline中发现了第一个错误。它应该是
**console=tty1**
不是
**console=/dev/tty1**
因为cmdline解析时文件系统不可用。在此更改后,我可以在虚拟终端中看到调试并使用 dmesg -n x 正如下面 oakad 所建议的那样,我可以改变其详细程度。
这几乎不是我想要的。我仍然缺少的一件事是通过 minicom 连接到vitural终端 tty1 。
Currenlty我只能在连接到我的树莓派的屏幕上或通过串行接口 ttyAMA0 看到内核日志。
此外,当我在PC上运行测试时,如果我通过 Alt + Ctrl + n 切换到虚拟控制台,我可以看到内核调试,其中 n 是虚拟控制台的数量。
我想要的是例如: ssh 会话到raspbery pi,我开始 minicom 并指定 tty1 作为端口。 在PC的情况下,我想启动xterm( / dev / pts / n ),其中我启动minicom并指定 tty1 作为端口。
不幸的是,在rasberry Pi和PC的情况下,我都无法在这样的 minicom 会话中看到内核调试。在树莓派的情况下,我试图从minicom发送文件,我看到它正在工作 - 文件内容显示在显示器直接连接到rasberry pi。从rasberry到 minicom 的不幸记录不会转移或被卡在某处。是否有人可以告诉我是否可以显示内核日志的这种方法?
答案 0 :(得分:1)
您可以设置控制台&#34;详细程度&#34;级别为dmesg -n x
,其中x是&#34; minimal&#34;的名称。要打印到控制台的消息优先级。尝试说dmesg -n debug
以查看控制台上的所有内容,包括KERN_DEBUG
条消息。