鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

编译安装内核

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

CentOS 7.6

  1. 创建目录并进入该目录。
    1
    2
    mkdir -p /home/kernel-bcache
    cd /home/kernel-bcache
    
  2. 获取内核源码。
    1. 执行如下命令查看系统内核版本。
      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
    2. 下载对应版本内核源码包至“/home/kernel-bcache”目录。

      下载路径:http://vault.centos.org/7.6.1810/updates/Source/SPackages/

    3. 解压源码包。
      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模块。
    1. 获取Bcache源码放到“/home”

      下载链接:https://gitee.com/kunpengcompute/bcache/repository/archive/smart-write-cache.zip

    2. 解压源码。
      1
      2
      cd /home
      unzip bcache-smart-write-cache.zip
      
    3. 替换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模块。
    1
    make menuconfig
    
    1. 选择Device Drivers

    2. “Enter”键进入下一级菜单,选择Multiple device driver support (RAID and LVM )

    3. “Enter”键进入下一级菜单,选中Block device as cache,键盘输入“M”选中该配置。

    4. 选择两次“Exit”返回至第一层。

  7. 修改内核PageSize大小为4KB。
    1. 选择Kernel Features

    2. “Enter”键进入下一级菜单,选择Page size(64KB)

    3. “Enter”键进入选择,按“Space”键选择4KB。

    4. 选择两次“Exit”保存并退出。

  8. 修改配置文件。
    1. 打开文件。
      1
      vi .config
      
    2. 在配置文件中找到“CONFIG_BCACHE”字段,“CONFIG_BCACHE=m”,则可确认Bcache模块已打开。

    3. 继续在配置文件中找到“CONFIG_ARM64_4K_PAGES”字段,“CONFIG_ARM64_4K_PAGES=y”则可确认PageSize为4K。

    4. 输入: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. 查看默认内核启动项。
    1
    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. 获取内核源码。
    1. 查看系统内核版本。
      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
    2. 下载对应版本内核源码包至“/home/kernel-bcache”目录。

      下载路径:https://mirrors.tools.huawei.com/openeuler/openEuler-20.03-LTS-SP1/source/Packages/

    3. 解压源码包。
      1
      2
      rpm2cpio kernel-4.19.90-2109.1.0.0108.oe1.src.rpm | cpio -divm
      tar -zxvf kernel.tar.gz
      
  3. 配置镜像源。
    1. 通过SFTP工具将OS对应的everything镜像源文件“openEuler-***-everything-aarch64-dvd.iso”上传到服务器“/root”目录下。
    2. 创建一个本地文件夹用于挂载本地镜像。

      此处以在根目录下创建iso文件夹为例创建文件夹挂载本地镜像。

      1
      mkdir -p /iso
      
    3. 将iso文件挂载到本地文件夹。
      1
      mount /root/openEuler-***-everything-aarch64-dvd.iso /iso
      
    4. 创建并配置镜像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模块。
    1. 获取Bcache源码放到“/home”

      下载链接:https://gitee.com/openeuler/kernel/tree/openEuler-1.0-LTS/kernel

    2. 解压源码。
      1
      2
      cd /home
      unzip kernel-openEuler-1.0-LTS.zip
      
    3. 替换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模块。
    1
    make menuconfig
    
    1. 选择Device Drivers

    2. “Enter”键进入下一级菜单,选择Multiple device driver support (RAID and LVM )

    3. “Enter”键进入下一级菜单,选中Block device as cache,键盘输入“M”选中该配置。

    4. 选择两次“Exit”返回至第一层。

  8. 修改内核PageSize大小为4KB。
    1. 选择Kernel Features

    2. “Enter”键进入下一级菜单,选择Page size(64KB)

    3. “Enter”键进入选择,按“Space”键选择4KB。

    4. 选择两次“Exit”保存并退出。

  9. 确认配置文件。
    1. 打开文件。
      1
      vi .config
      
    2. 在配置文件中找到“CONFIG_BCACHE”字段,“CONFIG_BCACHE=m”则可确认Bcache模块打开。

    3. 继续在配置文件中找到“CONFIG_ARM64_4K_PAGES”字段,“CONFIG_ARM64_4K_PAGES=y”则可确认PageSize为4K。

    4. “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. 查看默认内核启动项。
    1
    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