---
title: 编译安装内核
description: "本文档中，不同操作系统下的操作若有不同，会进行说明区分，若未说明，则该操作在两个操作系统下一致。"
url: https://www.hikunpeng.com/document/detail/zh/boostsds/smartwc/kunpengswc_20_0006.html
sourcePath: /source/zh/boostsds/smartwc/kunpengswc_20_0006.html
indexId: 795f8cd04bb579a7c4d113ac687ec505d87d943867e6be092d2d83a8967eadc451
---
# 编译安装内核

本文档中，不同操作系统下的操作若有不同，会进行说明区分，若未说明，则该操作在两个操作系统下一致。


#### CentOS 7.6

1. 创建目录并进入该目录。
  1 2 mkdir -p /home/kernel-bcache cd /home/kernel-bcache

2. 获取内核源码。

  a. 执行如下命令查看系统内核版本。
    1 uname -a

    查询到的版本内核如下。

```
Linux ceph3 4.14.0-115.el7a.0.1.aarch64 #1 SMP Sun Nov 25 20:54:21 UTC 2018 aarch64 aarch64 aarch64 GNU/Linux
```


  b. 下载对应版本    内核源码包(http://vault.centos.org/7.6.1810/updates/Source/SPackages/)
至“/home/kernel-bcache”目录。
    下载路径：

  c. 解压源码包。
    1 2 rpm2cpio kernel-alt-4.14.0-115.10.1.el7a.src.rpm | cpio -divm tar -xvf linux-4.14.0-115.10.1.el7a.tar.xz

3. 安装依赖。
  1 yum -y install rpm-build m4 gcc xmlto asciidoc openssl-devel hmaccalc python-devel newt-devel perl-ExtUtils-Embed elfutils-devel zlib-devel binutils-devel bison audit-libs-devel java-devel numactl-devel pciutils-devel ncurses-devel createrepo genisoimage net-tools git bc

4. 替换Bcache模块。

  a.     获取Bcache源码(https://gitee.com/kunpengcompute/bcache/repository/archive/smart-write-cache.zip)
放到“/home”。
  b. 解压源码。
    1 2 cd /home unzip bcache-smart-write-cache.zip

  c. 替换Bcache。
    1 cp -rf /home/bcache-smart-write-cache/drivers/md/bcache /home/kernel-bcache/linux-4.14.0-115.10.1.el7a/drivers/md/

5. 获取内核配置文件。
  1 2 cd /home/kernel-bcache/linux-4.14.0-115.10.1.el7a cp ../kernel-alt-4.14.0-aarch64.config .config

6. 配置Bcache模块。
```
make menuconfig
```


  a. 选择“Device Drivers ”。
  b. 按“Enter”键进入下一级菜单，选择“Multiple device driver support (RAID and LVM )”。
  c. 按“Enter”键进入下一级菜单，选中“Block device as cache”，键盘输入“M”选中该配置。
  d. 选择两次“Exit”返回至第一层。
7. 修改内核PageSize大小为4KB。

  a. 选择“Kernel Features”。
  b. 按“Enter”键进入下一级菜单，选择“Page size（64KB）”。
  c. 按“Enter”键进入选择，按“Space”键选择4KB。
  d. 选择两次“Exit”保存并退出。
8. 修改配置文件。

  a. 打开文件。
    1 vi .config

  b. 在配置文件中找到“CONFIG_BCACHE”字段，“CONFIG_BCACHE=m”，则可确认Bcache模块已打开。
  c. 继续在配置文件中找到“CONFIG_ARM64_4K_PAGES”字段，“CONFIG_ARM64_4K_PAGES=y”则可确认PageSize为4K。
  d. 输入:wq!并按“Enter”键保存退出文件。
9. 用步骤8修改完成的配置文件覆盖默认配置文件。
  1 cp .config ../kernel-alt-4.14.0-aarch64.config

10. 输入“y”确认。
11. 执行以下命令生成RPM包，执行结束后将在“/root/rpmbuild/RPMS/aarch64/”生成RPM包。
  1 2 make binrpm-pkg -j48 make rpm-pkg -j

12. 将步骤11中生成的内核RPM包上传至所有需要使用智能写Cache的服务器的“/home/kernel-rpm”目录下。
  1 2 mkdir -p /home/kernel-rpm cp /root/rpmbuild/RPMS/aarch64/* /home/kernel-rpm

13. 安装内核RPM包。
  1 2 cd /home/kernel-rpm yum -y install kernel-4.14.0-1.aarch64.rpm kernel-devel-4.14.0-1.aarch64.rpm kernel-headers-4.14.0-1.aarch64.rpm

14. 查看系统中所有已安装的内核版本。
  1 cat /etc/grub2-efi.cfg | grep CentOS

15. 查看默认内核启动项。
```
grub2-editenv list
```


  - 如果默认版本是新安装的内核版本CentOS Linux (4.14.0-115.10.1.el7a.aarch64) 7 (AltArch)，直接执行    步骤17
。
  - 如果默认版本不是新安装的内核版本，则执行    步骤16
后再执行    步骤17
。
16. 修改默认内核启动项，其中“CentOS Linux (4.14.0-115.10.1.el7a.aarch64) 7 (AltArch)”为新装内核版本。

```
grub2-set-default "CentOS Linux (4.14.0-115.10.1.el7a.aarch64) 7 (AltArch)"
```


17. 重启系统。
  1 reboot


#### openEuler 20.03

1. 创建目录并进入该目录。
  1 2 mkdir -p /home/kernel-bcache cd /home/kernel-bcache

2. 获取内核源码。

  a. 查看系统内核版本。
    1 uname -a

    查询到的版本内核信息如下。

```
Linux localhost.localdomain 4.19.90-2109.1.0.0108.oe1.aarch64 #1 SMP Mon Sep 6 03:51:48 UTC 2021 aarch64 aarch64 aarch64 GNU/Linux
```


  b. 下载对应版本    内核源码包(https://mirrors.tools.huawei.com/openeuler/openEuler-20.03-LTS-SP1/source/Packages/)
至“/home/kernel-bcache”目录。
  c. 解压源码包。
    1 2 rpm2cpio kernel-4.19.90-2109.1.0.0108.oe1.src.rpm | cpio -divm tar -zxvf kernel.tar.gz

3. 配置镜像源。

  a. 通过SFTP工具将OS对应的everything镜像源文件“openEuler-***-everything-aarch64-dvd.iso”上传到服务器“/root”目录下。
  b. 创建一个本地文件夹用于挂载本地镜像。
    此处以在根目录下创建iso文件夹为例创建文件夹挂载本地镜像。

    1 mkdir -p /iso

  c. 将iso文件挂载到本地文件夹。
    1 mount /root/openEuler-***-everything-aarch64-dvd.iso /iso

  d. 创建并配置镜像Yum源。

    1. 创建repo文件。
      1 vi /etc/yum.repos.d/openEuler.repo

    2. 按“i”键进入编辑模式，在文件中加入以下内容，配置挂载镜像Yum源。
      1 2 3 4 5 6 [Base] name=Base baseurl=file:///iso enabled=1 gpgcheck=0 priority=1

    3. 添加以下内容，配置openEuler网络源。
      1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 [openEuler-source] name=openEuler-source baseurl=http://repo.openeuler.org/openEuler-20.03-LTS/source/ enabled=1 gpgcheck=1 gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS/source/RPM-GPG-KEY-openEuler [openEuler-os] name=openEuler-os baseurl=http://repo.openeuler.org/openEuler-20.03-LTS/OS/aarch64/ enabled=0 gpgcheck=1 gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS/OS/aarch64/RPM-GPG-KEY-openEuler [openEuler-everything] name=openEuler-everything baseurl=http://repo.openeuler.org/openEuler-20.03-LTS/everything/aarch64/ enabled=0 gpgcheck=1 gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS/everything/aarch64/RPM-GPG-KEY-openEuler [openEuler-EPOL] name=openEuler-epol baseurl=http://repo.openeuler.org/openEuler-20.03-LTS/EPOL/aarch64/ enabled=1 gpgcheck=0 [openEuler-update] name=openEuler-update baseurl=http://repo.openeuler.org/openEuler-20.03-LTS/update/aarch64/ enabled=1 gpgcheck=0

    4. 按“Esc”键退出编辑模式，输入:wq!并按“Enter”键保存退出文件。
4. 安装依赖。
  1 dnf -y install ncurses-devel bison m4 flex rpm-build rpmdevtools asciidoc audit-libs-devel binutils-devel elfutils-devel elfutils-libelf-devel gtk2-devel java-1.8.0-openjdk-devel xz-devel libbabeltrace-devel libunwind-devel newt-devel numactl-devel openssl-devel pciutils-devel perl-generators python3-devel python3-docutils xmlto zlib-devel createrepo genisoimage

5. 替换Bcache模块。

  a.     获取Bcache源码(https://gitee.com/openeuler/kernel/tree/openEuler-1.0-LTS/kernel)
放到“/home”。
  b. 解压源码。
    1 2 cd /home unzip kernel-openEuler-1.0-LTS.zip

  c. 替换Bcache。
    1 \cp -rf /home/kernel-openEuler-1.0-LTS/drivers/md/bcache /home/kernel-bcache/kernel/drivers/md/

6. 获取内核配置文件。
  1 2 cd /home/kernel-bcache/kernel cp arch/arm64/configs/openeuler_defconfig .config

7. 配置Bcache模块。
```
make menuconfig
```


  a. 选择“Device Drivers ”。
  b. 按“Enter”键进入下一级菜单，选择“Multiple device driver support (RAID and LVM )”。
  c. 按“Enter”键进入下一级菜单，选中“Block device as cache”，键盘输入“M”选中该配置。
  d. 选择两次“Exit”返回至第一层。
8. 修改内核PageSize大小为4KB。

  a. 选择“Kernel Features”。
  b. 按“Enter”键进入下一级菜单，选择“Page size（64KB）”。
  c. 按“Enter”键进入选择，按“Space”键选择4KB。
  d. 选择两次“Exit”保存并退出。
9. 确认配置文件。

  a. 打开文件。
    1 vi .config

  b. 在配置文件中找到“CONFIG_BCACHE”字段，“CONFIG_BCACHE=m”则可确认Bcache模块打开。
  c. 继续在配置文件中找到“CONFIG_ARM64_4K_PAGES”字段，“CONFIG_ARM64_4K_PAGES=y”则可确认PageSize为4K。
  d. 按“Esc”键，输入:wq!并按“Enter”键退出文件。
10. 覆盖默认配置文件。
  1 cp .config arch/arm64/configs/openeuler_defconfig

11. 输入“y”确认。
12. 执行如下命令在“/root/rpmbuild/RPMS/aarch64/”路径下生成RPM包。

```
yum install bc -y
make binrpm-pkg -j48
make rpm-pkg
-j48
```


13. 将步骤12中生成的内核RPM包上传至所有需要使用智能写Cache的服务器的“/home/kernel-rpm”目录。
  1 2 mkdir -p /home/kernel-rpm cp /root/rpmbuild/RPMS/aarch64/* /home/kernel-rpm

14. 安装内核RPM包。
  1 2 cd /home/kernel-rpm dnf -y install kernel-*.rpm

15. 查看默认内核启动项。
```
grub2-editenv list
```

查看其中的默认内核版本号。

  - 如果默认版本是新安装的内核版本，则跳过    步骤16
。
  - 如果默认版本不是新安装的内核版本，则执行    步骤16
。
16. 修改默认内核启动项。
  1 cat /etc/grub2-efi.cfg | grep openEuler

  其中“openEuler (4.19.90-2109.1.0.0108.oe1.aarch64) 20.03 (LTS-SP1)”为新安装内核版本。

```
grub2-set-default "openEuler (4.19.90-2109.1.0.0108.oe1.aarch64) 20.03 (LTS-SP1)"
```


17. 重启系统。
  1 reboot
