Linux内核、驱动、系统调试汇总

1.给驱动模块的打印加tag

#define pr_fmt(fmt) "my_module: " fmt  //在所有include头文件之前加
pr_info("xxxx");

 

2.根据函数指针打印函数名

Symbols/Function Pointers:
    
%pF    versatile_init+0x0/0x110
%pf    versatile_init
%pS    versatile_init+0x0/0x110
%pSR   versatile_init+0x9/0x110 (with __builtin_extract_return_addr() translation)
%ps    versatile_init
%pB    prev_fn_of_versatile_init+0x88/0x88

“B”说明符导致符号名称带有偏移量,应该在打印堆栈回溯时使用。该说明符考虑了编译器优化的效果,该效果可能在使用尾调用并用noreturn GCC属性标记时发生。在ia64上,ppc64和parisc64体系结构的函数指针实际上是必须首先解析的函数描述符。
“F”和“f”说明符执行此分辨率,然后提供与“S”和“s”说明符相同的功能.

注:5.10内核上%pf的打印失效了。https://www.cnblogs.com/hellokitty2/p/9867168.html

 

3.抓systrace上保留更多CPU调度信息:adb shell "echo 1 > /sys/kernel/debug/tracing/events/sched/enable"

 

4./sys/devices/virtual目录下驱动文件

对于没有指定dev->parent的dev,其驱动的sysfs文件路径将被添加到/sys/devices/virtual目录下。如果指定了dev->parent,且其dev->class存在,那么该dev->name目录将被添加到parent->class所在目录下。

device_register //drivers\base\core.c
    device_add //drivers\base\core.c
        get_device_parent //drivers\base\core.c
            if (parent == NULL)
                parent_kobj = virtual_device_parent(dev); //如果dev->parent为NULL,就赋值为
            else if (parent->class && !dev->class->ns_type)
                return &parent->kobj;

 

posted on   Hello-World3  阅读(825)  评论(0编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示