Skip to main content
内核日志消息是诊断启动失败、驱动问题和运行时错误的主要信息来源。本页介绍如何将这些消息从设备中获取:通过串行控制台、早期启动控制台、运行时日志命令以及日志级别控制。

串行控制台

Qualcomm® Linux 内核使用 Qualcomm 通用接口(GENI)串行驱动,在 Qualcomm SoC 上支持 UART 控制台。

所需的内核配置

验证以下 Kconfig 选项已启用:
如果缺少任何一项,请在内核 defconfig 或 .cfg 片段中启用它们并重新构建。

将串行控制台添加到内核命令行

meta-qcom/conf/machine/include/qcom-<SoC>.confKERNEL_CMDLINE_EXTRA 中添加 console= 参数:

连接硬件

在设备与主机之间连接 USB 转 UART 线缆:
在主机上,使用任意终端仿真器(minicom、screen、PuTTY 或 Tera Term)以 115200 波特率打开串行端口:
有关上游文档,请参阅 Linux Serial Console

早期启动消息(earlycon)

earlycon 内核参数在完整 UART 驱动初始化之前启用一个最小化的早期控制台。它提供从启动序列最开始的内核消息,包括 initramfs 的解包和早期设备树处理,这些消息否则将不可见。 添加到内核命令行:
在 Qualcomm SoC 上,早期控制台使用相同的 ttyMSM0 UART。消息从 start_kernel() 的第一行开始立即显示。
earlyconconsole=ttyMSM0,... 是相互独立的。同时使用两者可以获得从早期启动到登录提示符之间不间断的输出。

printk 日志级别

printk 是内核的日志函数。每条消息都带有一个日志级别,控制它是否显示在控制台上。 表:printk 日志级别 数值低于当前控制台日志级别的消息会打印到控制台。Qualcomm Linux 上默认的控制台日志级别为 7(打印所有消息)。在默认控制台日志级别为 7 的情况下,级别 0–6(Emergency 到 Info)的消息会到达控制台。将级别设置为 8 可包含调试输出。

运行时日志级别控制

通过 /proc/sys/kernel/printk 在运行时读取和设置控制台日志级别。 该文件包含四个以空格分隔的值: <current> <default> <minimum> <boot-time-default>

启动时日志级别

在内核命令行上设置日志级别,以在 /proc 挂载之前控制详细程度:

读取内核日志缓冲区

dmesg

读取内核环形缓冲区最常用的方式:

/proc/kmsg

提供内核消息实时流的虚拟 proc 文件。每次读取只返回新消息:

跨重启的持久化日志

在运行 systemd-journald 的系统上,内核消息会被持久化存储,并可跨启动查询:
在没有 journald 的系统上,内核消息可能会写入 syslog 文件:

禁用控制台日志

在生产环境或性能测试中让控制台静默:
或者,在 Kconfig 中禁用早期控制台驱动,以获得完全静默的构建:

调试构建

要在 Yocto 镜像中包含调试符号和额外的调试 Kconfig,请在 bitbake 调用时传递 DEBUG_BUILD=1。这会在内核构建中启用 debug.config 片段:
或者将其永久添加到 build/conf/local.conf: