一.安裝systemtap
apt-get install systemtap
二.安裝內核調試信息
直接在http://ddebs.ubuntu.com/pool/main/l/linux/頁面下載下面的包(不需要重新編譯內核,只需要下載這個包)
linux-image-unsigned-4.15.0-66-generic-dbgsym_4.15.0-66.75_amd64.ddeb(我的CPU是x86_64的下載的這個)
三.測試
stap -p4 sample.stp -m sample (根據sample.stp生成sample.ko,sample.stp的內容在下面)
staprun sample.ko (運行ko)
運行後不報錯就說明安裝OK了
注意:如果不安裝內核調試信息會遇到如下問題,下面這個過程就是我踩的坑
Ubuntu18.04下安裝好Systemtap後運行如下測試命令
stap -p2 sample.stp
其中sample.stp內容如下:
#cat sample.stp
probe kernel.function("sys_read") { printf("hi from sys_read!\n"); exit() }
1.運行報如下錯誤
semantic error: while resolving probe point: identifier 'kernel' at sample.stp:1:7
source: probe kernel.function("sys_read") { printf("hi from sys_read!\n"); exit() }
^
semantic error: missing x86_64 kernel/module debuginfo [man warning::debuginfo] under '/lib/modules/4.15.0-66-generic/build'
Pass 2: analysis failed. [man error::pass2]
Tip: /usr/share/doc/systemtap/README.Debian should help you get started.
2.運行stap-prep命令
根據README.Debian的提示需要運行stap-prep命令
To use systemtap you need to manually install the linux-image-*-dbg and linux-header-* packages that match your running kernel. To simplify this task you can use the stap-prep command.
但運行stap-prep後會報如下問題(需要dbgsym信息)
You need package linux-image-4.15.0-66-generic-dbgsym but it does not seem to be available
Ubuntu -dbgsym packages are typically in a separate repository
Follow https://wiki.ubuntu.com/DebuggingProgramCrash to add this repository
3.直接在http://ddebs.ubuntu.com/pool/main/l/linux/頁面下載下面的包(不需要重新編譯內核,只需要下載這個包)
linux-image-unsigned-4.15.0-66-generic-dbgsym_4.15.0-66.75_amd64.ddeb(我的CPU是x86_64的下載的這個)
4.下載後運行如下的命令安裝
dpkg -i linux-image-unsigned-4.15.0-66-generic-dbgsym_4.15.0-66.75_amd64.ddeb
5.再次運行stap-prep命令
綜上,就可以用stap命令了
stap -p4 sample.stp -m sample (根據sample.stp生成sample.ko)
staprun sample.ko (運行ko)