我正在编写一个将错误消息打印到环形缓冲区dmesg 输出的设备驱动程序。我想看到dmesg它改变时的输出。
我怎样才能做到这一点?
我有一个关于 Linux 端口的问题。如果我通过 USB 连接我的设备并想检查它的端口,我不能使用命令 lsusb 来完成它,它只指定了该总线上的总线编号和设备编号:
[ziga@Ziga-PC ~]$ lsusb
Bus 003 Device 007: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
Run Code Online (Sandbox Code Playgroud)
是否有命令可以告诉我设备直接连接到的端口?到目前为止,唯一的方法是断开连接并重新连接并使用以下命令:
[ziga@Ziga-PC ~]$ dmesg | grep tty
[ 0.000000] console [tty0] enabled
[ 0.929510] 00:09: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[ 4.378109] systemd[1]: Starting system-getty.slice.
[ 4.378543] systemd[1]: Created slice system-getty.slice.
[ 8.786474] usb 3-4.4: FTDI USB Serial Device converter now attached to ttyUSB0
Run Code Online (Sandbox Code Playgroud)
在最后一行中,可以看到我的设备已连接到/dev/ttyUSB0。
AFAIKdmesg显示有关内核和内核模块的信息,/var/log/messages也显示内核和模块产生的信息。
那么有什么区别呢?难道/var/log/messages ?的输出dmesg?
更多可能有用的信息:
- 有一个内核环形缓冲区,我认为这是存储内核日志数据的唯一地方。
- IBM DeveloperWorks 上的文章“内核日志记录:API 和实现”描述了 API 和鸟瞰图。
我想给 dmesg 写一份声明。我怎样才能做到这一点?
dmesg 是一个从/var/log/dmesg. 与之相比less /var/log/dmesg的好处是,我可以使用 -T 标志进行人类可读的时间输出。
现在我想看看/var/log/dmesg.0,看看我的电脑是如何崩溃的。该文件包含来自先前会话的日志。但我想使用 dmesg 命令中的 -T 标志。或者等价的东西。
知道怎么做吗?
我不介意图形工具,但最好的方法是 cli 解决方案。
由于最近 Debian 更改了默认行为dmesg,我不能简单地从本地用户使用它。
% dmesg
dmesg: read kernel buffer failed: Operation not permitted
Run Code Online (Sandbox Code Playgroud)
同样适用于:
% cat /dev/kmsg
cat: /dev/kmsg: Operation not permitted
Run Code Online (Sandbox Code Playgroud)
以错误跟踪器为主角,这导致:
如何将此行为改回前一个行为,其中允许本地用户使用 dmesg。我找不到它的特定组(例如 sudoers 或类似的东西)。
我正在运行一个从头开始构建的 Linux 操作系统。我想将内核消息缓冲区 (dmesg) 保存到一个文件中,该文件将在重新启动之间保持不变。
我试过运行 syslogd,但它只是打开了一个新的日志文件 /var/log/messages,既没有现有的内核消息缓冲区,也没有内核在 syslogd 启动后生成的任何新消息。
如何将内核消息缓冲区保存到持久日志文件中?
dmesg 的输出显示自系统启动以来的秒数+毫秒数。
[ 10.470000] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[ 14.610000] device eth0 entered promiscuous mode
[ 18.750000] cfg80211: Calling CRDA for country: DE
[ 18.750000] cfg80211: Regulatory domain changed to country: DE
Run Code Online (Sandbox Code Playgroud)
问:如何将秒+毫秒转换为可读格式?
我的消息:
root@OpenWrt:/tmp# dmesg -h
dmesg: invalid option -- h
BusyBox v1.19.4 (2013-03-14 11:28:31 UTC) multi-call binary.
Usage: dmesg [-c] [-n LEVEL] [-s SIZE]
Print or control the kernel ring buffer
-c Clear ring buffer after printing
-n LEVEL Set console logging level
-s …Run Code Online (Sandbox Code Playgroud) dmesg 显示来自serial8250的大量消息:
$ dmesg | grep -i serial
[ 0.884481] Serial: 8250/16550 driver, 32 ports, IRQ sharing enabled
[ 6.584431] systemd[1]: Created slice system-serial\x2dgetty.slice.
[633232.317222] serial8250: too much work for irq4
[633232.453355] serial8250: too much work for irq4
[633248.378343] serial8250: too much work for irq4
...
Run Code Online (Sandbox Code Playgroud)
我以前没有看到过这条消息。一般是什么意思?我应该担心吗?
(根据我的研究,它不是特定于发行版的,但如果相关,我会在运行 Ubuntu 16.04 的 EC2 实例上看到消息。)