Linux编译器7.5升级以及内核5.6.3升级

1. 前言

Linux 内核升级到最新的版本,需要先升级gcc的版本,本文主要以 RHEL8.0 为 OS,讲解 Linux 内核5.6.3版本和 GCC 编译器7.5为例,讲解整个更新过程。

2. 升级必须的安装包

OS 安装选择的是 Desktop 下包全选,如果是其他安装,需要检查 OS 是否安装 gcc,libstdc++,make 以及 kernel-headers,kernel-devel,ncurses-devel 等等,如果没有安装,可以通过 yum 安装"development tools" group.

yum groupinstall "Development Tools

yum install ncurses-devel

3. 更新gcc编译器版本到 7.5

1.解压 gcc 压缩包到指定目录

tar -xvf gcc-7.5.0.tar.gz -C /usr/local/src/

一般我们将第三方的软件源代码放置在/usr/local/src目录

2.下载必要的编译库

cd /usr/local/src/gcc-7.5.0

可以通过目录contrib/download_prerequisites查看到必要的库有以下几个:

必需的编译库

 

如果机器已经连接互联网,则可以通过执行以下命令,直接从互联网自动下载

./contrib/download_prerequisites

当然如果没有联网,可以通过自己手动下载,下载地址是ftp://gcc.gnu.org/pub/gcc/infrastructure/,然后将这四个压缩包放置到gcc源码根目录/usr/local/src/gcc-7.5.0,然后再执行即可。

[root@localhost gcc-7.5.0]# cp /mnt/Private/Compressed/gmp-6.1.0.tar.bz2 .

[root@localhost gcc-7.5.0]# cp /mnt/Private/Compressed/mpfr-3.1.4.tar.bz2 .

[root@localhost gcc-7.5.0]# cp /mnt/Private/Compressed/mpc-1.0.3.tar.gz .

[root@localhost gcc-7.5.0]# cp /mnt/Private/Compressed/isl-0.16.1.tar.bz2 .

[root@localhost gcc-7.5.0]# ./contrib/download_prerequisites

gmp-6.1.0.tar.bz2: OK

mpfr-3.1.4.tar.bz2: OK

mpc-1.0.3.tar.gz: OK isl-0.16.1.tar.bz2: OK

All prerequisites downloaded successfully.

3.编译安装

./configure --enable-checking=release --enable-languages=c,c++ --disable-multilib

make -j24

make install

shutdown -r now

--disable-multilib 意味着只编译 64bit 编译器,如果想编译 32bit 编译器,可以用--enbale-multilib,OS 必须安装 i686 的包,这些包默认是没有安装的。 --enbale-languages 指定编译的语言,如果不指定,可能需要好几天的时间。 make -j24 并行多线程编译,可以减少编译时间。24指定 jobs number.可以指定为 CPU 支持的最大线程数。

48 个 jobs,我这可是一个 48 cores 的机器,编译用时 13 分钟,如果是个人 PC,那估计没个几个小时,是不可能完事,开始编译,该干嘛就可以干嘛去了。

安装完成后必须重启系统,不然下一步升级内核会报错

重启后,gcc -v查看当前gcc版本是否是最新的版本。

[root@localhost ~]# gcc -v

Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-pc-linux-gnu/7.5.0/lto-wrapper Target: x86_64-pc-linux-gnu Configured with: ./configure --enable-checking=release --enable-languages=c,c++ --disable-multilib Thread model: posix gcc version 7.5.0 (GCC)

4. 更新内核到5.6.3

开始编译前,需要先安装 libelf-dev, libelf-devel 或者 elfutils-libelf-devel。 RHEL8.0 OS, 我们选择安装 elfutils-libelf-devel.

yum install elfutils-libelf-devel

还需要安装openssl-devel加解密开发包

yum install openssl-devel

1.解压内核源文件到指定目录

tar -xvf linux-5.6.3.tar.xz -C /usr/src/kernels/

一般我们将内核源代码放置在目录/usr/src/kernels,该目录同样是系统默认内核的 kernel source 所在位置。

2.编译安装

cd /usr/src/kernels/linux-5.6.3/ sh -c 'yes "" | make oldconfig' make -j48 make modules_install make install

第二个命令用于将当前系统的内核选项生成到当前目录,会在内核目录生成.config文件,该文件内记录了哪些编译为模块,哪些是 buildin。

另外,

可以通过make clean清理编译环境,这个命令会清理掉已经编译的,但不包含配置文件,如.config

可以通过make mrproper清理编译环境,包含所有的编译内容。

编译过程中显示的CCcheck compile的缩写。

[M]表示编译为module,否则为 buildin。

如果有特殊编译需求,可以通过make menuconfig逐一配置编译项。

3.切换启动内核为新的内核

grub2-set-default 0

切换默认引导项为第一项,可以查看 grub.cfg 文件。

4.重启后查看内核版本

[root@localhost ~]# uname -r 5.6.3

5. Debug

  1. 如果报以下错误

make[1]: *** No rule to make target 'certs/rhel.pem', needed by 'certs/x509_certificate_list'.

可以查看.config 文件中,CONFIG_SYSTEM_TRUSTED_KEYS="certs/rhel.pem"改为CONFIG_SYSTEM_TRUSTED_KEYS=""即可。

调整编译项

 

6.Other

请关注公众号

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章