---
title: 编译准备
description: "本文是在默认操作系统Ubuntu 20.04.3（内核版本5.4.0-81-generic）下进行编译内核源码编译。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/230RC2/armnative/kunpengcpskbox_20_0037.html
sourcePath: /source/zh/kunpengboostkithistory/230RC2/armnative/kunpengcpskbox_20_0037.html
indexId: c813097c3b690ce1592a2749061a7fa47277b16e772bc5a1216e77f982109ba178
---
# 编译准备

本文是在默认操作系统Ubuntu 20.04.3（内核版本5.4.0-81-generic）下进行编译内核源码编译。

在编译开始前，请正确配置服务器的网络环境、软件源、同步服务器系统时间，以便下载相关的编译依赖包。

1. 编译时请使用root账号登录和操作。
2. 禁用警告“your kernel does not support swap memory limit...”。
  编辑“/etc/default/grub”文件，修改参数“GRUB_CMDLINE_LINUX”的值。

  1 2 # vim /etc/default/grub GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"

3. 禁用SELinux。
  编辑“/etc/selinux/config”文件，若没有该文件就创建后再进行编辑，编辑参数“SELINUX”的值为“disabled”。 1 2 # vim /etc/selinux/config SELINUX=disabled

4. 启动多路Kbox容器时，主机侧文件访问量大，需调整用户可创建的inotify instances的上限。
  在“/etc/sysctl.conf”文件中添加“fs.inotify.max_user_instances”参数的值。 1 2 # vim /etc/sysctl.conf fs.inotify.max_user_instances = 8192

5. 更新引导项并重启系统，使上述配置生效。
  1 2 # update-grub # reboot

6. 安装基础依赖包。
  1 2 # apt install dpkg dpkg-dev libncurses5-dev libssl-dev libpciaccess0 # apt install libdrm-amdgpu1 xserver-xorg-video-amdgpu lxc

  如果安装过程中有获取包失败的情况，请根据提示中的网址，手动获取安装包进行安装，安装成功后，继续安装尚未安装的依赖包。

7. 安装Docker组件。若用户已自定义安装Docker，可跳过此步骤。
参考软件环境中的下载链接，下载Docker静态安装包，以docker-19.03.15.tgz为例。

  a. 将下载后的安装包上传至服务器，以“/root”路径为例，并解压。

```
# cd
~
# tar xvpf docker-19.03.15.tgz
```


  b. 解压后，root路径下会多出一个“docker”文件夹，将“docker”文件夹中所有内容拷贝至“/usr/bin”文件夹下。

```
# cp -p docker/* /usr/bin
```


  c. 整段执行如下命令，配置docker.service文件。

```
cat >/usr/lib/systemd/system/docker.service <<EOF
[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com
After=network.target docker.socket
[Service]
Type=notify
EnvironmentFile=-/run/flannel/docker
WorkingDirectory=/usr/local/bin
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock --selinux-enabled=false --log-opt max-size=1g
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
```


    拷贝上述代码时请注意粘贴在终端的样式，参考样式如下图：

  d. 启动docker服务并设置开机启动docker服务。

```
# systemctl daemon-reload
# systemctl restart docker
# systemctl enable docker
```


    每次重启服务器后，如果Docker未自启动成功，需要执行上述三条命令。

8. 更新linux-firmware。若用户已升级过固件，可跳过此步骤。
  参考软件环境中的下载链接，下载linux-firmware-20210919.tar.gz文件。

  将下载后的安装包上传至服务器，以“/root”
  路径为例，并解压。

```
# cd
~
# tar -xvpf linux-firmware-20210919.tar.gz
```


  解压后，“root”
  路径下会多出一个“linux-firmware-20210919”
  文件夹，将firmware拷贝Linux标准固件目录下。

```
# cp -ar linux-firmware-20210919/*gpu    /usr/lib/firmware/
```
