启用调试信息和动态追踪事件构建内核

使用perf probe在源代码层次定义动态追踪事件时,必须要有内核的调试信息。

使用发布版附带的内核时,有些发布版(如RedHat和SuSE等)提供了所有的调试信息,而Debian和Ubuntu的内核调试信息数据包有时就不包括关于驱动程序的调试信息。每个发布版需要安装的数据包是不同的,因此需要根据所使用的发布版来选择。本节仅介绍作为一个内核技术人员(Kernel Hacker)如何从源代码构建内核,生成调试信息的方法。虽说如此,但也并非与已经提到很多次的内核构建方法有太大的不同。调试信息可以在编译时向编译器传递-g选项来生成,但内核中已经存在用来启用这个选项的配置项目(CONFIG_DEBUGINFO)。CONFIG_DEBUGINFO在内核配置中的位置如下。


Kernel hacking->

[*]Compile the kernel with debug info


除此以外,还需要启用动态追踪事件的支持。由于动态追踪事件使用kprobes和ftrace,因此需要启用CONFIG_KPROBES、CONFIG_FTRACE、CONFIG_KPROBE_EVENT。这三者分别位于下列位置。


General setup->

[*]Kprobes

Kernel hacking->

[*]Tracers->

[*]Enable kprobes-based dynamic events


启用这些选项构建内核,安装驱动程序模块和主体(body)。但是,安装了内核后,请注意不要删除创建的目录下的vmlinux文件。vmlinux文件包含调试信息,而安装到/boot目录等的vmlinuz的调试信息已删除。perf probe会从创建目录搜索vmlinux,以便读出调试信息,因此,如果这个文件被删除就会运行失败。另外,即使构建了新的内核,也不能改写或删除内核源代码。调试信息只包含创建时的源代码,因此,一旦源代码更改就会产生不一致。

包括perf probe在内的perf tools虽然在内核的源代码中也是存在的,但创建时需要与内核分开进行。perf tools的创建方法请参考Hack#64。

下面尝试使用新的内核运行perf probe。