源码编译构建安装内核kernel
荣涛 2021年10月27日

文档修改日志

日期 修改内容 修改人 备注
2021年10月27日 创建 荣涛
2021年10月28日 添加可能的问题 荣涛

1. 引言

1.1. 编译前准备

$ wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.6.9.tar.xz
$ unxz -v linux-5.6.9.tar.xz # 或者
$ xz -d -v linux-5.6.9.tar.xz
$ wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.6.9.tar.sign
$ gpg --verify linux-5.6.9.tar.sign
#    上面命令可能的输出为:
#    gpg: assuming signed data in 'linux-5.6.9.tar'
#    gpg: Signature made Sun 12 Aug 2018 04:00:28 PM CDT
#    gpg:                using RSA key 79BE3E4300411886
#    gpg: Can't check signature: No public key
$ gpg --recv-keys 79BE3E4300411886
#    上面命令可能的输出为:
#    gpg: key 79BE3E4300411886: 7 duplicate signatures removed
#    gpg: key 79BE3E4300411886: 172 signatures not checked due to missing keys
#    gpg: /home/vivek/.gnupg/trustdb.gpg: trustdb created
#    gpg: key 79BE3E4300411886: public key "Linus Torvalds <torvalds@kernel.org>" imported
#    gpg: no ultimately trusted keys found
#    gpg: Total number processed: 1
#    gpg:               imported: 1
$ gpg --verify linux-5.6.9.tar.sign
#    上面命令可能的输出为:
#    gpg: assuming signed data in 'linux-5.6.9.tar'
#    gpg: Signature made Sun 12 Aug 2018 04:00:28 PM CDT
#    gpg:                using RSA key 79BE3E4300411886
#    gpg: Good signature from "Linus Torvalds <torvalds@kernel.org>" [unknown]
#    gpg:                 aka "Linus Torvalds <torvalds@linux-foundation.org>" [unknown]
#    gpg: WARNING: This key is not certified with a trusted signature!
#    gpg:          There is no indication that the signature belongs to the owner.
#    Primary key fingerprint: ABAF 11C6 5A29 70B1 30AB  E3C4 79BE 3E43 0041 1886
$ tar xvf linux-5.6.9.tar
$ cd linux-5.6.9
$ cp -v /boot/config-$(uname -r) .config
#    上步可能的输出
#    '/boot/config-4.15.0-30-generic' -> '.config'

1.2. 依赖安装

1.2.1. Debian/Ubuntu Linux

$ sudo apt-get install build-essential libncurses-dev bison flex libssl-dev libelf-dev

1.2.2. CentOS/RHEL/Oracle/Scientific Linux

$ sudo yum group install "Development Tools" # or
$ sudo yum groupinstall "Development Tools"
$ sudo yum install ncurses-devel bison flex elfutils-libelf-devel openssl-devel

1.2.3. Fedora Linux

$ sudo dnf group install "Development Tools"
$ sudo dnf install ncurses-devel bison flex elfutils-libelf-devel openssl-devel

1.3. 配置内核

几个选项:

  • $ make menuconfig
  • $ make xconfig
  • $ make gconfig
$ make menuconfig

1.4. 编译内核

## use 4 core/thread ##
$ make -j 4
## get thread or cpu core count using nproc command ##
$ make -j $(nproc)

1.5. 安装内核

# Install the Linux kernel modules
$ sudo make modules_install
# Install the Linux kernel
$ sudo make install
#    It will install three files into /boot directory as well
#    as modification to your kernel grub configuration file:
#    initramfs-5.6.9.img
#    System.map-5.6.9
#    vmlinuz-5.6.9

1.6. 更新grub

1.6.1. CentOS/RHEL/Oracle/Scientific 和 Fedora Linux

$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
$ sudo grubby --set-default /boot/vmlinuz-5.6.9
# You can confirm the details with the following commands:
$ sudo grubby --info=ALL | more
$ sudo grubby --default-index
$ sudo grubby --default-kernel

1.6.2. Debian/Ubuntu Linux

$ sudo update-initramfs -c -k 5.6.9
$ sudo update-grub

1.7. 重启

$ sudo reboot
# 这里将进行系统重启
$ uname -mrs
# 可能的输出
# Linux 5.6.9 x86_64

2. 安装tools

2.1. perf

我的环境缺少了依赖:

$ sudo yum install slang-devel
$ sudo yum install binutils-devel zlib-static
$ sudo yum install libbabeltrace-devel
$ sudo yum install java-1.8.0-openjdk-devel
# 下面的 platform-python-devel 安装后并不起作用
$ sudo yum install platform-python-devel

编译perf:

$ make

安装perf:

# 注意,这里需要指定目标目录,否则可能被安装到 /root/bin/perf
$ sudo make install DESTDIR=/usr

2.2. bpftools

直接安装即可。

2.3. kvm_stat

直接安装即可。

3. 可能遇到的问题

3.1. BTF: .tmp_vmlinux.btf: pahole (pahole) is not available

在编译内核过程中,可能出现问题现象:

BTF: .tmp_vmlinux.btf: pahole (pahole) is not available
Failed to generate BTF for vmlinux
Try to disable CONFIG_DEBUG_INFO_BTF
make: *** [Makefile:1106: vmlinux] Error 1

参考链接:BTF: .tmp_vmlinux.btf: pahole (pahole) is not available

解决办法:

尝试安装(根据不同系统类型):

$ sudo apt install dwarves
$ sudo dnf install dwarves
$ sudo zypper in dwarves

如果搜不到,就代开powertools的yum源:

vim /etc/yum.repo.d/CentOS-Linux-PowerTools.repoenabled=1

4. 参考链接

  • How to compile and install Linux Kernel 5.6.9 from source code
  • kernel-5.14.0-8.el9
  • BTF: .tmp_vmlinux.btf: pahole (pahole) is not available
Copyright (C) CESTC Com.

源码编译构建安装内核kernel相关推荐

  1. ROS2 Dashing源码编译和安装

    ROS2 Dashing源码编译和安装 安装前的准备 1 2 3 4 5 官方教程: https://index.ros.org/doc/ros2/Installation/Dashing/Linux ...

  2. ROS Dashing源码编译和安装

    ROS Dashing源码编译和安装 前置准备 安装前的准备 可选项: 搭建编译环境 搭建步骤 1. 设置语言环境 2. 添加ROS 2 apt仓库 3. 安装开发工具和ROS工具 4. 获取ROS ...

  3. ubuntu 环境下调试mysql源码_【转】Ubuntu 16.04下 Mysql 5.7.17源码编译与安装

    Ubuntu 16.04下 Mysql5.7.17源码编译与安装 系统环境 一. 系统安装条件 1.cmake MySQL使用cmake跨平台工具预编译源码,用于设置mysql的编译参数. sudo ...

  4. Atlas 2.2.0源码编译及安装步骤

    Atlas 2.2.0源码编译及安装步骤 一.源码编译 1. 下载源码 2. 前置环境安装 3. 修改版本号 4. 修改源码中 atlas与kafka版本兼容问题 5. 开始编译 6. 问题锦集 二. ...

  5. make无法执行——源码编译、安装

    在进行软件源码编译.安装时 ,出现make无法执行的情况下,是缺少基础开发包 执行命令即可: apt-get  install    build-essential

  6. Spark入门教程(二)Spark2.2源码编译及安装配置

    Spark2.2源码下载 点此进入官网下载地址: 下载Spark spark官网下载截图 //下载好后用传输工具传输到我们的linux上并解压缩 tar -zxvf spark-2.2.0.tgz 源 ...

  7. Hadoop-2.8.0集群搭建、hadoop源码编译和安装、host配置、ssh免密登录、hadoop配置文件中的参数配置参数总结、hadoop集群测试,安装过程中的常见错误

    25. 集群搭建 25.1 HADOOP集群搭建 25.1.1集群简介 HADOOP集群具体来说包含两个集群:HDFS集群和YARN集群,两者逻辑上分离,但物理上常在一起 HDFS集群: 负责海量数据 ...

  8. nginx 源码编译、安装

    nginx 源码编译安装 下载Nginx安装包,Nginx 官网下载,并解压 cd /usr/local/src wget http://nginx.org/download/nginx-1.21.5 ...

  9. 源码编译、安装libffi

    1. 下载源码编译安装 wget ftp://sourceware.org/pub/libffi/libffi-3.3.tar.gz cd libffi-3.3 ./configure --prefi ...

最新文章

  1. 函数要多小才够好——谈小函数之道
  2. 谷歌浏览器之如何调试页面js
  3. C和指针之联合体大小
  4. Drainage Ditches POJ1273
  5. HTTP/2 协议入门
  6. 【BZOJ】1725: [Usaco2006 Nov]Corn Fields牧场的安排
  7. window.showModalDialog模态对话框 值回传 TreeView无刷新
  8. iOS 14代码泄露iPhone 12系列细节:有且仅有两款配备ToF 3D镜头
  9. 微信公众平台开发之微团购
  10. CarMaker快速入门
  11. 传真SIP会话发起协议(SIP)
  12. 深入浅出理解SVM支持向量机
  13. 用高德地图罗永浩语音包 随时听老罗讲段子
  14. 代码详解:以股票预测为例,揭秘时间序列预测
  15. unity通过点击按钮获取手机验证码
  16. 雷军:当CEO是因为被格式化了电脑
  17. win7 android 双系统平板 p1000,优派Windows7/Android双系统ViewPad 100
  18. 百度云 x 宝宝知道 | 你的宝宝问题,这个APP都知道
  19. iPad越狱运行Linux,免越狱用iPad或iPhon也能跑Windows系统教程(UTM技巧)
  20. LRTimelapse 5 for Mac(专业延时摄影软件)

热门文章

  1. 玩转Java8的 Stream 之函数式接口
  2. Spring依赖注入的两种方式(根据实例详解)
  3. Java 根据枚举的名字得到枚举的实例
  4. Vue自定义组件数组型双向绑定
  5. go语言调度器源代码情景分析之五:汇编指令
  6. 通过管道进行线程间通信
  7. 文献阅读005【精读】
  8. TestNG+Maven+IDEA 自动化测试(一) 环境搭建
  9. Happy Valentine's Day
  10. C++中的long long和__int64类型(转载)