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

内核编译与安装

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

获取内核源码

  1. 创建目录并进入该目录。
    1
    2
    mkdir -p /home/kernel-bcache
    cd /home/kernel-bcache
    
  2. 下载内核源码包至“/home/kernel-bcache”目录。
  3. 解压源码包。
    • CentOS 7.6
      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
      
    • openEuler 20.03
      1
      2
      rpm2cpio kernel-4.19.90-2012.4.0.0053.oe1.src.rpm | cpio -divm
      tar -zxvf kernel.tar.gz
      
  4. 配置镜像源。(本步骤仅openEuler 20.03操作系统需要执行,CentOS 7.6操作系统用户请跳过。)
    1. 通过SFTP工具将“openEuler-***-everything-aarch64-dvd.iso”上传到服务器上“/root”目录下。
    2. 创建一个本地文件夹用于挂载本地镜像。
      1
      mkdir -p /iso
      
    3. 将iso文件挂载到本地文件夹。
      1
      mount /root/openEuler-***-everything-aarch64-dvd.iso /iso
      
    4. 创建镜像yum源。
      1
      vi /etc/yum.repos.d/openEuler.repo
      
      在文件中加入以下内容:
       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
      33
      34
      35
      36
      37
      38
      39
      [Base]
      name=Base
      baseurl=file:///iso
      enabled=1
      gpgcheck=0
      priority=1
      
      [openEuler-source]
      name=openEuler-source
      baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP1/source/
      enabled=1
      gpgcheck=1
      gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS-SP1/source/RPM-GPG-KEY-openEuler
      
      [openEuler-os]
      name=openEuler-os
      baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP1/OS/aarch64/
      enabled=0
      gpgcheck=1
      gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS-SP1/OS/aarch64/RPM-GPG-KEY-openEuler
      
      [openEuler-everything]
      name=openEuler-everything
      baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP1/everything/aarch64/
      enabled=0
      gpgcheck=1
      gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS-SP1/everything/aarch64/RPM-GPG-KEY-openEuler
      
      [openEuler-EPOL]
      name=openEuler-epol
      baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP1/EPOL/aarch64/
      enabled=1
      gpgcheck=0
      
      [openEuler-update]
      name=openEuler-update
      baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP1/update/aarch64/
      enabled=1
      gpgcheck=0
      
  5. 安装依赖。
    • CentOS 7.6
      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
      
    • openEuler 20.03
      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
      

替换Bcache模块

  1. 获取Bcache源码放到“/home”

    下载链接:https://github.com/kunpengcompute/bcache/releases/tag/swc-v0.2.0

  2. 解压源码。
    • CentOS 7.6
      1
      2
      cd /home
      unzip bcache-swc-v0.2.0.zip
      
    • openEuler 20.03
      unzip openeuler-kernel-openEuler-1.0-LTS.zip
  3. 替换Bcache。
    • CentOS 7.6
      1
      cp -rf /home/bcache-swc-v0.2.0/drivers/md/bcache /home/kernel-bcache/linux-4.14.0-115.10.1.el7a/drivers/md/
      
    • openEuler 20.03
      1
      cp -rf /home/kernel/drivers/md/bcache /home/kernel-bcache/kernel/drivers/md/
      

修改内核配置

  1. 获取内核配置文件。
    • CentOS 7.6
      1
      2
      cd /home/kernel-bcache/linux-4.14.0-115.10.1.el7a
      cp ../kernel-alt-4.14.0-aarch64.config .config
      
    • openEuler 20.03
      1
      2
      cd /home/kernel-bcache/kernel
      cp arch/arm64/configs/openeuler_defconfig .config
      
  2. 配置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”返回至第一层。

  3. 修改内核PAGESIZE大小为4K。
    1. 选择Kernel Features

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

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

    4. 按两次“exit”保存并退出。

  4. 修改配置文件。(本步骤仅CentOS 7.6操作系统执行,openEuler 20.03操作系统用户请跳过。)
    1
    vi .config
    

    手动在第一行添加“#aarm64”。

  5. 确认配置文件。
    1. 确认Bcache模块打开。

    2. 确认PAGESIZE为4k。

  6. 覆盖默认配置文件。
    • CentOS 7.6
      1
      cp .config ../kernel-alt-4.14.0-aarch64.config
      

      输入y确认。

    • openEuler 20.03
      1
      cp .config arch/arm64/configs/openeuler_defconfig
      

      输入y确认。

生成内核RPM包

  1. 内核源码重新打包。
    • CentOS 7.6
      1
      2
      3
      4
      cd /home/kernel-bcache
      tar -cvf linux-4.14.0-115.10.1.el7a.tar linux-4.14.0-115.10.1.el7a
      rm -f linux-4.14.0-115.10.1.el7a.tar.xz
      xz -z linux-4.14.0-115.10.1.el7a.tar
      
    • openEuler 20.03
      1
      2
      cd /home/kernel-bcache
      tar -zcvf kernel.tar.gz kernel
      
  2. 生成“rpmbuild”目录。
    1
    2
    3
    mkdir -p /home/rpmbuild
    cd /home/rpmbuild
    mkdir -p BUILD  RPMS  SOURCES  SPECS  SRPMS
    
  3. 修改默认“rpmbuild”路径。
    1
    vi /root/.rpmmacros
    

    增加如下内容:

    1
    %_topdir /home/rpmbuild
    
  4. 拷贝文件至“rpmbuild”目录。
    • CentOS 7.6
      1
      2
      3
      cp -r /home/kernel-bcache/* SOURCES/
      cp /home/kernel-bcache/kernel-alt.spec SPECS/
      rm -rf SOURCES/linux-4.14.0-115.10.1.el7a
      
    • openEuler 20.03
      1
      2
      3
      cp -r /home/kernel-bcache/* SOURCES/
      cp /home/kernel-bcache/kernel.spec SPECS/
      rm -rf SOURCES/kernel
      
  5. 更新内核补丁。(本步骤仅CentOS 7.6操作系统执行,openEuler 20.03操作系统用户请跳过。)
    1
    rpmbuild -bp /home/rpmbuild/SPECS/kernel-alt.spec
    
  6. 编译生成内核RPM包。
    • CentOS 7.6
      1
      rpmbuild -bb /home/rpmbuild/SPECS/kernel-alt.spec --with baseonly --without debug --without debuginfo
      
      Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/rpmbuild/BUILDROOT/kernel-alt-4.14.0-115.10.1.el7a.aarch64
      Wrote: /home/rpmbuild/RPMS/aarch64/kernel-4.14.0-115.10.1.el7a.aarch64.rpm
      Wrote: /home/rpmbuild/RPMS/aarch64/kernel-headers-4.14.0-115.10.1.el7a.aarch64.rpm
      Wrote: /home/rpmbuild/RPMS/aarch64/perf-4.14.0-115.10.1.el7a.aarch64.rpm
      Wrote: /home/rpmbuild/RPMS/aarch64/python-perf-4.14.0-115.10.1.el7a.aarch64.rpm
      Wrote: /home/rpmbuild/RPMS/aarch64/kernel-tools-4.14.0-115.10.1.el7a.aarch64.rpm
      Wrote: /home/rpmbuild/RPMS/aarch64/kernel-tools-libs-4.14.0-115.10.1.el7a.aarch64.rpm
      Wrote: /home/rpmbuild/RPMS/aarch64/kernel-tools-libs-devel-4.14.0-115.10.1.el7a.aarch64.rpm
      Wrote: /home/rpmbuild/RPMS/aarch64/kernel-devel-4.14.0-115.10.1.el7a.aarch64.rpm
      Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.4Lfz8M
      + umask 022
      + cd /home/rpmbuild/BUILD
      + cd kernel-alt-4.14.0-115.10.1.el7a
      + rm -rf /home/rpmbuild/BUILDROOT/kernel-alt-4.14.0-115.10.1.el7a.aarch64
      + exit 0
    • openEuler 20.03
      1
      vi /usr/lib/rpm/macros
      

      修改“%_unpackaged_files_terminate_build 1”为“%_unpackaged_files_terminate_build 0”。

      1
      rpmbuild -bb /home/rpmbuild/SPECS/kernel.spec --with baseonly --without debug --without debuginfo
      
  7. 查看生成的内核RPM包。
    ls /home/rpmbuild/RPMS/aarch64/

安装内核

  1. 生成内核RPM包中生成的内核RPM包上传至所有需要使用智能写Cache的服务器的“/home/kernel-rpm”目录。
    1
    mkdir -p /home/kernel-rpm
    
  2. 安装内核RPM包。
    • CentOS 7.6
      1
      2
      cd /home/kernel-rpm
      yum -y install kernel-4.14.0-115.10.1.el7a.aarch64.rpm kernel-devel-4.14.0-115.10.1.el7a.aarch64.rpm kernel-headers-4.14.0-115.10.1.el7a.aarch64.rpm
      
    • openEuler 20.03
      1
      2
      cd /home/kernel-rpm
      dnf -y install kernel-4.19.90-2012.4.0.0053.aarch64.rpm kernel-devel-4.19.90-2012.4.0.0053.aarch64.rpm
      
  3. 查看默认内核启动项。
    1
    grub2-editenv list
    

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

    • 如果默认版本是新安装的内核版本,则跳过4
    • 如果默认版本不是新安装的内核版本,则执行4
  4. 修改默认内核启动项。
    • CentOS 7.6
      1
      cat /etc/grub2-efi.cfg  | grep CentOS
      

      其中“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)"
    • openEuler 20.03
      1
      cat /etc/grub2-efi.cfg  | grep openEuler
      

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

      grub2-set-default "openEuler (4.19.90-2012.4.0.0053.aarch64) 20.03 (LTS-SP1)"
  5. 重启系统。
    1
    reboot