- Linux Device Driver Development Cookbook
- Rodolfo Giometti
- 769字
- 2021-06-24 13:54:14
Filtering kernel messages
Suppose we wish to know which serial ports have been detected during boot. We know we can use the tail command, but by using it, we can see only the latest messages; on the other hand, we could use the cat command to recall all kernel messages since boot, but that's a lot of information! Alternatively, we can use these steps to filter the kernel messages:
- Here, we use the grep command as follows to filter out lines within the uart (or UART) string:
# cat /var/log/kern.log | grep -i uart
Feb 7 19:33:14 espressobin kernel: [ 0.000000] earlycon: ar3700_uart0 at MMIO 0x00000000d0012000 (options '')
Feb 7 19:33:14 espressobin kernel: [ 0.000000] bootconsole [ar3700_uart0] enabled
Feb 7 19:33:14 espressobin kernel: [ 0.000000] Kernel command line: console=ttyMV0,115200 earlycon=ar3700_uart,0xd0012000 loglevel=0 debug root=/dev/mmcblk0p1 rw rootwait net.ifnames=0 biosdevname=0
Feb 7 19:33:14 espressobin kernel: [ 0.289914] Serial: AMBA PL011 UART driver
Feb 7 19:33:14 espressobin kernel: [ 0.296443] mvebu-uart d0012000.serial: could not find pctldev for node /soc/internal-regs@d0000000/pinctrl@13800/uart1-pins, deferring probe
...
The preceding output can also be obtained by using the dmesg command as follows, which is a tool designed for this purpose:
# dmesg | grep -i uart
[ 0.000000] earlycon: ar3700_uart0 at MMIO 0x00000000d0012000 (options '')
[ 0.000000] bootconsole [ar3700_uart0] enabled
[ 0.000000] Kernel command line: console=ttyMV0,115200 earlycon=ar3700_uart,0
xd0012000 loglevel=0 debug root=/dev/mmcblk0p1 rw rootwait net.ifnames=0 biosdev
name=0
[ 0.289914] Serial: AMBA PL011 UART driver
[ 0.296443] mvebu-uart d0012000.serial: could not find pctldev for node /soc/
internal-regs@d0000000/pinctrl@13800/uart1-pins, deferring probe
...
- On the other hand, if we want to gather information regarding early boot activities, we can still use the dmesg command with the head command in order to display the first 10 lines of dmesg output only:
# dmesg | head -10
[ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]
[ 0.000000] Linux version 4.18.0-dirty (giometti@giometti-VirtualBox) (gcc ve
rsion 7.3.0 (Ubuntu/Linaro 7.3.0-27ubuntu1~18.04)) #5 SMP PREEMPT Sun Jan 27 13:
33:24 CET 2019
[ 0.000000] Machine model: Globalscale Marvell ESPRESSOBin Board
[ 0.000000] earlycon: ar3700_uart0 at MMIO 0x00000000d0012000 (options '')
[ 0.000000] bootconsole [ar3700_uart0] enabled
[ 0.000000] efi: Getting EFI parameters from FDT:
[ 0.000000] efi: UEFI not found.
[ 0.000000] cma: Reserved 32 MiB at 0x000000007e000000
[ 0.000000] NUMA: No NUMA configuration found
[ 0.000000] NUMA: Faking a node at [mem 0x0000000000000000-0x000000007fffffff]
- On the other hand, if we are interested in the last 10 lines, we can use the tail command. In fact, we already saw that, to monitor kernel activities, we can use it as shown in the following:
# tail -f /var/log/kern.log
So, to see the last 10 lines, we can do the following:
# dmesg | tail -10
- The same can be done with dmesg, too, by adding the -w option argument, as shown in the following example:
# dmesg -w
- The dmesg command can also filter out kernel messages according to their level by using the -l (or --level) option argument, as follows:
# dmesg -l 3
[ 1.687783] advk-pcie d0070000.pcie: link never came up
[ 3.153849] advk-pcie d0070000.pcie: Posted PIO Response Status: CA, 0xe00 @ 0x0
[ 3.688578] Unable to create integrity sysfs dir: -19
The preceding command shows kernel messages having the KERN_ERR level, while the following is the command to show messages having the KERN_WARNING level instead:
# dmesg -l 4
[ 3.164121] EINJ: ACPI disabled.
[ 3.197263] cacheinfo: Unable to detect cache hierarchy for CPU 0
[ 4.572660] xenon-sdhci d00d0000.sdhci: Timing issue might occur in DDR mode
[ 5.316949] systemd-sysv-ge: 10 output lines suppressed due to ratelimiting
- We can also combine levels in order to have both KERN_ERR and KERN_WARNING:
# dmesg -l 3,4
[ 1.687783] advk-pcie d0070000.pcie: link never came up
[ 3.153849] advk-pcie d0070000.pcie: Posted PIO Response Status: CA, 0xe00 @ 0x0
[ 3.164121] EINJ: ACPI disabled.
[ 3.197263] cacheinfo: Unable to detect cache hierarchy for CPU 0
[ 3.688578] Unable to create integrity sysfs dir: -19
[ 4.572660] xenon-sdhci d00d0000.sdhci: Timing issue might occur in DDR mode
[ 5.316949] systemd-sysv-ge: 10 output lines suppressed due to ratelimiting
- In the end, in the event of a lot of noisy messages, we can ask the system to clean the kernel ring buffer (where all kernel messages are stored) by using the following command:
# dmesg -C
Now, if we use dmesg again, we will see newly generated kernel messages only.
- Linux運維之道(第3版)
- Linux運維實戰:CentOS7.6操作系統從入門到精通
- Cybersecurity:Attack and Defense Strategies
- Implementing Cisco UCS Solutions
- 操作系統基礎與實踐:基于openEuler平臺
- 曝光:Linux企業運維實戰
- PLC控制系統應用與維護
- SharePoint 2013 應用開發實戰
- 嵌入式Linux驅動程序和系統開發實例精講
- Windows Phone應用程序開發
- 計算機系統開發與優化實戰
- Windows 7應用入門與技巧
- Linux內核設計的藝術:圖解Linux操作系統架構設計與實現原理
- Django Project Blueprints
- 完美應用Ubuntu(第2版)