SystemTap (简体中文)
Systemtap 是一种在运行时收集系统信息的基础架构,它是自由软件(Free Software)。
又快又容易
官方推荐编译一个linux-custom内核,但是重新编译原始的linux包更方便有效,这里介绍重新编译(同名的)linux包的方法。
准备
执行 sudo abs; cp -r /var/abs/core/linux .
获得PKGBUILD等文件.
修改config文件
编辑 config (32位内核) 或 config.x86_64 (64位内核), 确保打开这些选项:
- CONFIG_DEBUG_INFO=y
- CONFIG_DEBUG_INFO_REDUCED=n
- CONFIG_KPROBES=y
- CONFIG_RELAY=y
- CONFIG_DEBUG_FS=y
- CONFIG_MODULES=y
- CONFIG_MODULE_UNLOAD=y
默认只有CONFIG_DEBUG_INFO 和CONFIG_DEBUG_INFO_REDUCED没被打开,修改这两个即可.
对于当前的 core/linux (3.7.10),只要这样做就可以了:
x86_64
echo ' CONFIG_KPROBES=y CONFIG_KPROBES_SANITY_TEST=n CONFIG_KPROBE_EVENT=y CONFIG_NET_DCCPPROBE=m CONFIG_NET_SCTPPROBE=m CONFIG_NET_TCPPROBE=y CONFIG_DEBUG_INFO=y CONFIG_DEBUG_INFO_REDUCED=n CONFIG_X86_DECODER_SELFTEST=n ' >> config.x86_64
更新校验值
执行 md5sum config[.x86_64]
获得新的文件校验值.
编辑 PKGBUILD 文件, 这一部分 md5sums=('sum-of-first' ... 'sum-of-last')
和这一部分
source=('first-source' ... 'last-source')
是个数相同,顺序相同的, 把新获得的校验值在合适的位置替换.
makepkg --skipchecksums
使用命令可以跳过校验,但这样做对其它文件(比如下载的内核源码包)来说不安全,因此建议按这里给出的方法操作。
编译并安装
可选步骤: 可以在 /etc/makepkg.conf
文件中设置 MAKEFLAGS="-j16"
加速编译.
执行 makepkg
开始编译, 然后 sudo pacman -U *.pkg.tar.gz
安装编译好的包.
pacman 会提示你这是重新安装 (reinstall), 这就对了!
linux 和 linux-headers 需要安, linux-docs 则随意.
通过这个方法, 外部内核模块 (例如 nvidia 和 virtualbox) 就不需要被重新编译了.
Systemtap
从 AUR 中安装systemtap即可: systemtapAUR, 完成.
编译自定义内核
参考这个 官方README