文章目录
- 1.内核函数调用堆栈:4个函数
- 2.printk:cat /proc/cmdline查看console=ttyS0
- 3.动态打印:printk是全局的且只能设打印等级,动态打印可控制选择模块的打印,在内核配置打开CONFIG_DYNAMIC_DEBUG
- 4.ftrace:功能需要打开,image大小会变大
- 5.proc文件系统:/proc/cpuinfo,meminfo,net
- 6.sysfs文件系统:设备树里所有信息在/sys/devices/platform里,class是不同驱动但相同行为事件如input汇总
- 7.内核调试手段:debugfs.h中api建立目录/sys/kernel/debug
- 9.性能优化:裸磁盘无法使用,一般都刷文件系统
- 10.Valgrind内存泄漏排查案例:
- 11.cpu瓶颈:
- 12.主频设置
- 13.驱动稳定性
1.内核函数调用堆栈:4个函数
2.printk:cat /proc/cmdline查看console=ttyS0
3.动态打印:printk是全局的且只能设打印等级,动态打印可控制选择模块的打印,在内核配置打开CONFIG_DYNAMIC_DEBUG
printk会关中断影响性能,如果在usb的read/write里printk,那么usb就没法直接用了。我想加很多调试信息,但是不想影响linux性能,所以用动态打印,调试时才打开,control节点默认不输出,如下操作才输出,+p是转为printk。
4.ftrace:功能需要打开,image大小会变大
如下文件包含可追踪的所有场景。
如下案例:mpstat,perf。
如下sys_sync是系统调用。
如下可以打印出时间。
5.proc文件系统:/proc/cpuinfo,meminfo,net
6.sysfs文件系统:设备树里所有信息在/sys/devices/platform里,class是不同驱动但相同行为事件如input汇总
7.内核调试手段:debugfs.h中api建立目录/sys/kernel/debug
9.性能优化:裸磁盘无法使用,一般都刷文件系统
如下网络调试:
10.Valgrind内存泄漏排查案例:
如下malloc加个死循环就是内存泄漏。
dmesg会显示不全,因为环形buffer会覆盖。
11.cpu瓶颈:
-p pid
12.主频设置
13.驱动稳定性
希望arg有多大
likely一般用在if判断里,cpu会把当前指令后面指令预取出来,等到执行时就去执行,效率提高,但是也要判断后面那条指令大概率执不执行,执行的话取出来,不执行则跳过。