KGTP、linux内核、GDB的系统结构
如果用一句话给KGTP新用户总结,那我就会说,这三者的关系就是,用户通过GDB提供的命令行接口与驻扎在内核空间KGTP通信,使这个内核模块抓取制定的数据并归还给GDB,GDB最后展示给最终用户。
如果还有人不懂,那么我可以这样再深入一点,KGTP实际就是一个gdb stub(关于stub中文资料就比较多了),只不过它不是放在嵌入式板子上做调试用的,而是跑在内核里面抓数据用的。KGTP基本实现了GDB手册这一章要求这一章的命令。另一个优快云夏令营项目"给RT-Thread添加GDB stub支持“也是在RT-Thread上实现一个stub,不过这个stub主要为了为了完成调试功能。
这个系统架构可以用如下图表示:
接下来我从下至上粗略讲解各个模块实现原理
1.内核对KGTP的支持
内核自2.6早期版本开始引入kprobe功能,Document/kprobe.txt这片文档解释了kprobe功能、原理以及API。传统上内核程序开发者使用printk记录某一时刻内核的某些数据。而为了添加新的printk,需要修改内核源码,还可能需要重启机器,有了kprobe,