---
title: 内核合入Lustre补丁
description: "1. 创建目录结构。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengsdss/ecosystemEnable/Lustre/openmind_kunpenglustre_04_0006.html
sourcePath: /source/zh/kunpengsdss/ecosystemEnable/Lustre/openmind_kunpenglustre_04_0006.html
indexId: 4a3393eb9ad1b08f023975c29ba38b7a32f3809f15f283bed089482d8dd531ca81
---
# 内核合入Lustre补丁

#### 准备内核源码

1. 创建目录结构。
  1 2 3 4 cd $HOME mkdir -p kernel/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} cd kernel echo '%_topdir %(echo $HOME)/kernel/rpmbuild' > ~/.rpmmacros

2. 安装内核源码。
  1 rpm -ivh https://vault.centos.org/8.0.1905/BaseOS/Source/SPackages/kernel-4.18.0-80.11.2.el8_0.src.rpm

3. 用rpmbuild准备内核源码。
  1 2 cd ~/kernel/rpmbuild rpmbuild -bp --target=`uname -m` ./SPECS/kernel.spec

  结果输出如下。

  1 2 3 4 5 6 7 ... Processed config files are in /home/build/kernel/rpmbuild/BUILD/kernel-4.18.0-80.11.2.el8_0/linux-4.18.0-80.11.2.el8.aarch64/configs + cd .. + find . '(' -name '*.orig' -o -name '*~' ')' -exec rm -f '{}' ';' + find . -name .gitignore -exec rm -f '{}' ';' + cd .. + exit 0

4. 复制内核文件到lustre tree。
  1 cp ~/kernel/rpmbuild/BUILD/kernel-4.18.0-80.11.2.el8_0/linux-4.18.0-80.11.2.el8.aarch64/configs/kernel-4.18.0-aarch64.config ~/lustre-release/lustre/kernel_patches/kernel_configs/kernel-4.18.0-4.18-rhel8-aarch64.config

5. 编辑内核文件。
  1 vim ~/lustre-release/lustre/kernel_patches/kernel_configs/kernel-4.18.0-4.18-rhel8-aarch64.config

  找到“# IO Schedulers”，在下面插入以下内容。

  1 2 CONFIG_IOSCHED_DEADLINE=y CONFIG_DEFAULT_IOSCHED="deadline"


#### 合入Lustre补丁

1. 将所有补丁聚集到一个文件中。
  1 2 3 4 5 6 7 cd ~ rm -f ~/lustre-kernel-aarch64-lustre.patch #Note:没有这个文件就不用 cd ~/lustre-release/lustre/kernel_patches/series for patch in $(<"4.18-rhel8.series"); do \ patch_file="$HOME/lustre-release/lustre/kernel_patches/patches/${patch}"; \ cat "${patch_file}" >> "$HOME/lustre-kernel-aarch64-lustre.patch"; \ done

2. 复制内核补丁build tree。
  1 cp ~/lustre-kernel-aarch64-lustre.patch ~/kernel/rpmbuild/SOURCES/patch-4.18.0-lustre.patch

3. 编辑文件“~/kernel/rpmbuild/SPECS/kernel.spec”。
```
vim ~/kernel/rpmbuild/SPECS/kernel.spec
```


  a. 找到“find $RPM_BUILD_ROOT/lib/modules/$KernelVer”，在下面插入如下内容。
    1 cp -a fs/ext4/* $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/fs/ext4

  b. 找到“# empty final patch to facilitate testing of kernel patches”，在下面插入如下内容。
    1 2 # adds Lustre patches Patch99995: patch-%{version}-lustre.patch

  c. 找到“ApplyOptionalPatch linux-kernel-test.patch”，在下面插入如下内容。
    1 2 # lustre patch ApplyOptionalPatch patch-%{version}-lustre.patch

4. 覆盖内核配置文件“~/lustre-release/lustre/kernel_patches/kernel_configs/kernel-4.18.0-4.18-rhel8-aarch64.config”。
  1 2 echo '# arm64' > ~/kernel/rpmbuild/SOURCES/kernel-4.18.0-aarch64.config cat ~/lustre-release/lustre/kernel_patches/kernel_configs/kernel-4.18.0-4.18-rhel8-aarch64.config >> ~/kernel/rpmbuild/SOURCES/kernel-4.18.0-aarch64.config


#### 生成内核RPM包

用rpmbuild构建内核RPM包。

```
cd ~/kernel/rpmbuild
buildid="_lustre" # Note: change to any string that identify your work
rpmbuild -ba --with firmware --target aarch64 --with baseonly \
--without kabichk --define "buildid ${buildid}" \
~/kernel/rpmbuild/SPECS/kernel.spec
```

构建成功后返回以下结果。

```
Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/build/kernel/rpmbuild/BUILDROOT/kernel-4.18.0-80.11.2.el8_lustre.aarch64
Wrote: /home/build/kernel/rpmbuild/SRPMS/kernel-4.18.0-80.11.2.el8_lustre.src.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/kernel-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/kernel-headers-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/kernel-cross-headers-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/kernel-debuginfo-common-aarch64-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/perf-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/perf-debuginfo-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/python3-perf-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/python3-perf-debuginfo-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/kernel-tools-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/kernel-tools-libs-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/kernel-tools-libs-devel-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/kernel-tools-debuginfo-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/bpftool-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/bpftool-debuginfo-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/kernel-core-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/kernel-devel-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/kernel-modules-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/kernel-modules-extra-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Wrote: /home/build/kernel/rpmbuild/RPMS/aarch64/kernel-debuginfo-4.18.0-80.11.2.el8_lustre.aarch64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.SqV3vr
+ umask 022
+ cd /home/build/kernel/rpmbuild/BUILD
+ cd kernel-4.18.0-80.11.2.el8_0
+ rm -rf /home/build/kernel/rpmbuild/BUILDROOT/kernel-4.18.0-80.11.2.el8_lustre.aarch64
+ exit 0
```


#### 安装内核

1. 切换至root用户，安装内核RPM包。
  1 2 3 su root cd /home/build/kernel/rpmbuild/RPMS/aarch64/ rpm -Uvh kernel-core-4.18.0-80.11.2.el8_lustre.aarch64.rpm kernel-headers-4.18.0-80.11.2.el8_lustre.aarch64.rpm kernel-modules-4.18.0-80.11.2.el8_lustre.aarch64.rpm kernel-modules-extra-4.18.0-80.11.2.el8_lustre.aarch64.rpm kernel-4.18.0-80.11.2.el8_lustre.aarch64.rpm kernel-devel-4.18.0-80.11.2.el8_lustre.aarch64.rpm kernel-tools-4.18.0-80.11.2.el8_lustre.aarch64.rpm kernel-tools-libs-4.18.0-80.11.2.el8_lustre.aarch64.rpm

2. 重启系统。
  1 reboot

3. 查看内核版本。
  1 uname -r

  1 4.18.0-80.11.2.el8_lustre.aarch64
