首页 / 资讯中心 / 文章详情

IPC_LOG + DYN_DEBUG + PRINTK

IPC_LOG + DYN_DEBUG + PRINTK ★ FEATURED ARTICLE
1) CONFIG_IPC_LOGGING/ # ls -l /sys/kernel/debug/ipc_logging/4a80000.qcom,qup_uart_tx/ total 0 -r--r--r-- 1 root root 0 Jan 1 08:00 log -r--r--r-- 1 root root 0 Jan 1 08:00 log_cont / # echo tt /dev/ttyHS1 / # cat /sys/kernel/debug/ipc_logging/4a80000.qcom,qup_uart_tx/log [ 720.203382040/ 0x33ee71cd9] DMA Tx[0x0000000000:2] : 74 74 [ 720.205881832/ 0x33ee7d859] DMA Tx[0x0000000000:2] : 0d 0a2CONFIG_DYNAMIC_DEBUGmount -t debugfs none /sys/kernel/debug/ //挂载debugfsecho -n file xxxxxx.c p /sys/kernel/debug/dynamic_debug/control //打开调试信息参考 Linux 内核动态打印机制详解3) printk配置printk 是 Linux 内核里用来打印日志的核心函数‌它会把消息写进内核环形缓冲区再按日志级别和过滤条件分发到已注册的 console 设备如串口、VGA 等。‌‌ 工作机制‌写入阶段‌printk 格式化文本后写入内核环形缓冲区__log_buf这一步基本总能成功除非缓冲区被锁住或打印速度超过 CPU 处理能力。‌输出阶段‌console_unlock()按优先级和过滤条件把缓冲区日志分发给所有已注册的 console 设备由各设备的write回调真正输出到硬件。‌‌ 日志级别级别数字越小越紧急输出条件是level console_loglevel不是大于。‌‌宏定义数值含义KERN_EMERG0系统不可用KERN_ALERT1必须立即处理KERN_CRIT2严重错误KERN_ERR3普通错误KERN_WARNING4警告KERN_NOTICE5正常但需关注KERN_INFO6普通信息KERN_DEBUG7调试信息⚙️ 查看与调整查看当前配置cat /proc/sys/kernel/printk输出 4 个值依次是console_loglevel、default_message_loglevel、minimum_console_loglevel、default_console_loglevel。‌‌‌打开所有内核输出‌echo 8 /proc/sys/kernel/printk或dmesg -n 8‌启动时调整‌bootargs 加loglevel8调试时可配合ignore_loglevel强制全部输出但生产环境别长期开。‌‌⚠️ 常见坑dmesg能看到但串口看不到多半是console_loglevel过滤掉了KERN_DEBUG7 级默认不会打到普通控制台需要用ignore_loglevel或dmesg -n 8调上去。‌‌ 排查思路‌dmesg 能看到、串口看不到‌查console_loglevel、console 是否注册成功、串口 console 的write是否被拖住。‌dmesg 也看不到‌日志没进缓冲区、缓冲区被刷掉、级别设置异常或环形缓冲区太小被冲掉。‌调试挂死‌先用dmesg -n 8或引导时加loglevel8 ignore_loglevel确保信息外吐定位后立即去掉。‌‌对于 pr_debug 和 dev_dbg 这类 7 级调试信息默认不会输出可用动态调试/sys/kernel/debug/dynamic_debug/control或静态调试驱动文件头加#define DEBUG打开
阅读完成 · 觉得有帮助?
咨询建站