文章目录
- 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
- 8.性能优化:裸磁盘无法使用,一般都刷文件系统
- 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,相当于下面的define dev_dbg …。


4.ftrace:系统层面,功能需要打开,image大小会变大



如下文件包含可追踪的所有场景。







如下是top命令,用户层us,内核sy,空闲id,硬中断hi,软中断si(如进行网络数据大量收发,si会升高,因为有tx软中断和rx软中断处理才能发数据)



如下案例:mpstat,perf(看函数执行次数),ftrace看函数执行时间。





如下sys_sync是系统调用。

如下可以打印出时间。


5.proc文件系统:/proc/cpuinfo,meminfo,net



6.sysfs文件系统:设备树里所有信息在/sys/devices/platform里,class是不同驱动但相同行为事件如input汇总










7.内核调试手段:debugfs.h中api建立目录/sys/kernel/debug






8.性能优化:裸磁盘无法使用,一般都刷文件系统





网络数据收发绕过cpu,用硬中断。




驱动加上要考虑磁盘io,内存占用,cpu使用情况





















如下网络调试:






10.Valgrind内存泄漏排查案例:



如下malloc加个死循环就是内存泄漏。





dmesg会显示不全,因为环形buffer会覆盖。
11.cpu瓶颈:




-p pid

12.主频设置


13.驱动稳定性
希望arg有多大

likely一般用在if判断里,cpu会把当前指令后面指令预取出来,等到执行时就去执行,效率提高,但是也要判断后面那条指令大概率执不执行,执行的话取出来,不执行则跳过。
