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 2020-05-08 14:33 Hello-World3 阅读(798) 评论(0) 编辑 收藏 举报