Linux: 手动编译安装指定内核的perf工具

文章目录

    • [1. 引言](#1. 引言)
    • [2. 安装开发工具和依赖](#2. 安装开发工具和依赖)
    • [3. 下载内核源代码](#3. 下载内核源代码)
    • [4. 编译 `perf` 工具](#4. 编译 perf 工具)
    • [5. 验证 `perf` 工具的安装](#5. 验证 perf 工具的安装)
    • [6. 解决编译中的依赖问题(选看)](#6. 解决编译中的依赖问题(选看))
      • [6.1 安装缺少的依赖项](#6.1 安装缺少的依赖项)
      • [6.2 手动编译 `libtraceevent` 库](#6.2 手动编译 libtraceevent 库)
    • [7. 如何禁用不需要的功能?(选看)](#7. 如何禁用不需要的功能?(选看))

1. 引言

在安装perf工具时,可能会发现 apt-cache search linux-tools-$(uname -r) 无法找到与之内核版本 (6.8.4-060804-generic) 相匹配的 linux-tools

$ apt-cache search linux-tools-$(uname -r)                                                                                                                                                                             
$ sudo apt-get install linux-tools-$(uname -r)                                                                                                                                                                         
E: Unable to locate package linux-tools-6.8.4-060804-generic
E: Couldn't find any package by glob 'linux-tools-6.8.4-060804-generic'
E: Couldn't find any package by regex 'linux-tools-6.8.4-060804-generic

本文将详细介绍如何编译 perf 工具,并解决编译过程中可能遇到的依赖问题。

关于Perf工具的使用请参考:
使用perf(火焰图)查看热点函数和系统调用最大延迟函数
如何使用perf 统计cpu和内存?

2. 安装开发工具和依赖

在开始编译 perf 工具之前,确保安装了必要的开发工具和库:

bash 复制代码
sudo apt update
sudo apt install git build-essential libncurses-dev flex bison openssl libssl-dev dkms libelf-dev libudev-dev libpci-dev libiberty-dev autoconf

3. 下载内核源代码

下载与当前内核版本匹配的内核源代码:

bash 复制代码
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.8.4.tar.xz
tar -xf linux-6.8.4.tar.xz
cd linux-6.8.4

4. 编译 perf 工具

进入内核源码的 tools/perf 目录,开始编译 perf 工具:

bash 复制代码
cd tools/perf
make

编译完成后,将生成的 perf 可执行文件复制到系统路径中:

bash 复制代码
sudo cp perf /usr/local/bin/

5. 验证 perf 工具的安装

成功编译后,验证 perf 是否已正确安装并可以使用:

bash 复制代码
$ perf --version                                                                                                                                                                                                       
perf version 6.8.4

6. 解决编译中的依赖问题(选看)

在编译过程中,可能会遇到依赖问题。

6.1 安装缺少的依赖项

首先,安装编译 perf 所需的各种开发库:

bash 复制代码
sudo apt update
sudo apt install libdw-dev libunwind-dev libslang2-dev liblzma-dev libzstd-dev libcap-dev libnuma-dev libbabeltrace-dev libperl-dev libtraceevent-dev libpfm4-dev libsystemd-dev elfutils libelf-dev systemtap-sdt-dev

这些依赖项确保 perf 工具的全面功能支持,包括调试、压缩、NUMA、事件跟踪等。

6.2 手动编译 libtraceevent

如果某些依赖项无法安装,可以选择禁用相应的功能。如禁用 libtraceevent

bash 复制代码
make -j10 NO_LIBTRACEEVENT=1

当然也可以手动编译 libtraceevent 库。

安装libtraceevent编译工具和依赖

首先,安装编译所需的工具和依赖:

bash 复制代码
sudo apt update
sudo apt install git build-essential autoconf automake libtool pkg-config
克隆 libtraceevent 源代码

从官方库克隆 libtraceevent 源代码:

bash 复制代码
git clone https://git.kernel.org/pub/scm/libs/libtrace/libtraceevent.git
cd libtraceevent
编译和安装 libtraceevent

编译并安装 libtraceevent

bash 复制代码
make
sudo make install
sudo ldconfig

7. 如何禁用不需要的功能?(选看)

在编译perf工具时,您可以根据需求禁用某些功能,以减少编译过程中对不必要依赖项的需求。以下是一些常见的禁用选项:

bash 复制代码
make -j10 NO_LIBTRACEEVENT=1 NO_LIBUNWIND=1 NO_LIBSLANG=1 NO_LIBBABELTRACE=1 NO_LIBPYTHON=1
  • NO_LIBTRACEEVENT=1: 禁用libtraceevent支持。
  • NO_LIBUNWIND=1: 禁用libunwind支持(用于堆栈跟踪)。
  • NO_LIBSLANG=1: 禁用libslang支持(用于文本用户界面)。
  • NO_LIBBABELTRACE=1: 禁用libbabeltrace支持(用于perf data的CTF格式)。
  • NO_LIBPYTHON=1: 禁用Python脚本支持。
相关推荐
watermelonoops1 小时前
Deepin和Windows传文件(Xftp,WinSCP)
linux·ssh·deepin·winscp·xftp
疯狂飙车的蜗牛2 小时前
从零玩转CanMV-K230(4)-小核Linux驱动开发参考
linux·运维·驱动开发
远游客07135 小时前
centos stream 8下载安装遇到的坑
linux·服务器·centos
马甲是掉不了一点的<.<5 小时前
本地电脑使用命令行上传文件至远程服务器
linux·scp·cmd·远程文件上传
jingyu飞鸟5 小时前
centos-stream9系统安装docker
linux·docker·centos
超爱吃士力架5 小时前
邀请逻辑
java·linux·后端
cominglately8 小时前
centos单机部署seata
linux·运维·centos
魏 无羡8 小时前
linux CentOS系统上卸载docker
linux·kubernetes·centos
CircleMouse8 小时前
Centos7, 使用yum工具,出现 Could not resolve host: mirrorlist.centos.org
linux·运维·服务器·centos
木子Linux8 小时前
【Linux打怪升级记 | 问题01】安装Linux系统忘记设置时区怎么办?3个方法教你回到东八区
linux·运维·服务器·centos·云计算