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

請關注公衆號

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