1. 简介 要使用ftrace进行boottime追踪,可以使用内核参数(bootargs)或者bootconfig来进行配置。 关键的函数如下: 1+-- start_kernel 2/// ... ... 3| +-- setup_arch 4| +-- setup_boot_config 5| | +-- get_boot_config_from_initrd 6| | +-- xbc_get_embedded_bootconfig 7| | +-- xbc_init /// 解析bootconfig,创建树 8| +-- setup_command_line 9/// ... ... 10| +--...
1. trace-cmd trace-cmd需要root权限。 1.1. 使用步骤 1# 保存成文件 2trace-cmd record 3trace-cmd report 1# 从tracefs读取 2trace-cmd start 3trace-cmd stop 4trace-cmd show 5 6trace-cmd clear 7trace-cmd restart 8trace-cmd show 1.2. 常见需要忽略的函数 1# 内存分配 2-n kmem_cache_alloc -n __kmalloc -n kmalloc_trace -n kfree -n kmalloc_slab -n...
1. ARM64 Crash调试环境搭建 主要参考资料: 内核源码 Documentation/admin-guide/kdump/kdump.rst或者Documentation for Kdump - The kexec-based Crash Dumping Solution Crash白皮书:https://crash-utility.github.io/crash_whitepaper.html Crash github:https://github.com/crash-utility/crash Oracle: Using the crash Debugger 1.1. x86_64主机编译ARM64 Crash工具 ...
Crash帮助信息,来自于crash -h
1. Crash命令介绍 虽然使用硬件设备来调试有很多优点和方便之处,但是我一直希望代码是可以自己调试自己的,从而避免使用一些昂贵的外部的的设备。 crash version: 8.0.2 gdb version: 10.2共51个命令。 1* files mod sbitmapq union 2alias foreach mount search vm 3ascii fuser net set vtop 4bpf gdb p sig waitq 5bt help ps struct whatis 6btop ipcs pte swap wr 7dev irq ptob sym q 8dis kmem ptov sys 9eval...
1. 说明 根据内核文档整理而成,具体格式含义可查看内核文档,或点击如何获得正确的printk格式占位符(v6.6)或如何获得正确的printk格式占位符(latest)查看。 linux-6.6相关内核文档路径如下: Documentation/core-api/printk-formats.rst Documentation/translations/zh_CN/core-api/printk-formats.rst 2. 整数类型 内核的printk不支持%n,也不支持浮点格式(%e / %f / %g / %a)。在printk中使用任何不支持的占位符或长度限定符都会导致一个WARN并且终止vsnprintf()执行。注...
1. 串口发送sysrq 对于串口来说,sysrq本质是一个低电平脉冲,通常为100ms。 1在通用异步收发传输器(UART)中,Line Status Register(LSR)的 “Break interrupt indicator”(中断指示位)表示检测到了一个间断信号。 2一、含义 3当该位被置位时,表明 UART 接收器检测到了一个间断条件。一个间断通常是指接收线路上长时间保持为低电平状态,通常超过一个字符传输的时间。这可能是由于外部设备故意发送一个间断信号,或者由于通信线路上的异常情况导致的。 4二、用途 5信号异常检测:可以用来检测通信线路上的异常情况。例如,如果通信双方在一段时间内没有数据传输,然后突然检测到一个间...
1. 打开dynamic_debug 1CONFIG_DYNAMIC_DEBUG=y 运行时控制:/proc/dynamic_debug/control,如果开启了CONFIG_DEBUG_FS,在<debugfs>/dynamic_debug/control,两者效果是相同的。 2. 使用dynamic_debug 可以使用pr_debug或者dev_dbg来打印调试信息。 1#define pr_fmt(fmt) fmt 2 3#include <linux/kernel.h> 4#include <linux/init.h> 5#include <linux/module.h> 6 7static int __init...
1. printk 打印级别控制:/proc/sys/kernel/printk printk_index:/sys/kernel/debug/printk/index/ 2. pr_fmt和dev_fmt 在阅读Linux内核或其他开源代码时,在文件的开始部分,通常能看到类似如下代码。但是代码中又没有看到使用的地方。 1#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 2 3#include <...> 4#include <...> 其实pr_fmt是通常和大名鼎鼎的printk一起来合作实现其他宏,比较常见的就是pr_*()系列宏,另外一些模块或驱动中也会利用pr_fmt来输出日志信息。...