CentOS 7 elrepo 5.4 内核安装 nvidia 闭源驱动

(首发地址:学习日记 CentOS 7 elrepo 5.4 内核安装 nvidia 闭源驱动 – 学习日记

CentOS 7 是一款 2014 年发布的企业级 Linux 服务器操作系统,现在仍不断有新的机器在继续安装它。但 CentOS 7 标准的 3.10 内核不一定支持一些新的硬件,这时安装 elrepo 源里的长期支持内核 kernel-lt 和主线内核 kernel-mt 就成了一个选择。

但是, 因为 CentOS 7 古老的开发工具集,我在新的 elrepo 内核下面安装 nvidia 驱动碰到了麻烦。本文以一台宿主机是 Deepin 20.9 Linux,在 virt-manager 虚拟机软件里直通 Nvidia P106-100 矿卡的 CentOS 7.9 虚拟机为例,简述在 elrepo kernel 5.4 下面几种不同方式安装的工具集下安装 nvidia 驱动的情况。着重介绍 gcc 及 ld 程序的安装设置。而安装 elrepo kernel 和 nvidia 驱动则只给出参考链接。

一、视频演示

本视频详细介绍 CentOS 7 Linux 下安装 elrepo-kernel 源的 5.4 长期支持内核、centos-release-scl-rh 源里的 devtoolset-9-gcc 和 nvidia 闭源驱动及使用 dkms 在新安装 elrepo-kernel 源里的 6.5 主线内核时自动编译安装 nvidia 驱动的完整步骤。演示地址:【CentOS 7 elrepo 5.4 内核安装 nvidia 闭源驱动】 https://www.bilibili.com/video/BV1wN411i7zJ/?share_source=copy_web&vd_source=d1925b070926f23b2b6676137251e9ea

CentOS 7 elrepo 5.4 内核安装 nvidia 闭源驱动

二、安装 elrepo kernel 5.4
这里把 kernel-lt、kernel-lt-devel、kernel-lt-headers 全部安装上。其中 kernel-lt-headers 不是安装 nvidia 驱动必需的。参见:How To Install Linux Kernel 5.17 on CentOS 7 https://computingforgeeks.com/install-linux-kernel-5-on-centos-7/

三、在 CentOS 7 下安装 nvidia 驱动的通用步骤
参考链接:How to install Nvidia driver on CentOS 7 Linux https://www.cyberciti.biz/faq/how-to-install-nvidia-driver-on-centos-7-linux/
CentOS 7 下可能缺少一些组件,导致虽然能完成 nvidia 的安装但功能不完整,因此可以把这些可选依赖组件先装上:

sudo yum install vulkan libglvnd-devel

安装过程中可能 dkms 部署 nvidia 驱动会失败,但这并不影响当前内核成功安装 nvidia 驱动,但会导致新装内核后无法自动 dkms 部署 nvidia 驱动。解决方法是在首次 nvidia 驱动安装完成之后,手动执行一次 dkms 部署如下:

sudo /sbin/dkms install --no-depmod -m nvidia -v 535.86.05 -k 5.4.251-1.el7.elrepo.x86_64 --force

然后安装新的内核 dkms 就可以自动部署 nvidia 驱动了。需要在新装内核时 dkms 自动部署 nvidia 驱动,还需要把真实使用的 gcc 软链接到 /usr/bin/gcc

四、在自带 gcc 4.8.5 开发工具集下安装 nvidia 驱动失败
在使用自带 gcc 4.8.5 的默认情况下,按照上面的步骤安装 nvidia 驱动会失败。检查安装日志“/var/log/nvidia-installer.log”线索摘要如下:
警告信息:编译内核和编译nvidia驱动用的 gcc 版本不一致:

Warning: Compiler version check failed:
   The major and minor number of the compiler used to
   compile the kernel:
   gcc version 9.3.1 20200408 (Red Hat 9.3.1-2) (GCC)
   does not match the compiler used here:
   cc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
错误信息:
  ././include/linux/compiler_types.h:214:24: error: expected '(' before '__inline'
    #define asm_inline asm __inline
                           ^

五、用 centos-release-scl-rh 源里的 devtoolset-9-gcc 的 gcc-9 安装成功(推荐)

一)、参考链接:
1、centos-release-scl https://github.com/sclorg/centos-release-scl
On CentOS, there are packages centos-release-scl and centos-release-scl-rh available in centos-extra repository
2、Issue with module compilation on Centos 7 kernel-lt-5.4 from elrepo https://github.com/aabc/ipt-netflow/issues/171

二)、安装步骤:

sudo yum --enablerepo=extras install centos-release-scl-rh
sudo yum install devtoolset-9-gcc
scl enable devtoolset-9 bash

然后用上面“三”里面安装 nvidia 驱动的通用步骤即可。

六、使用 Conda 里的 gcc 9.4 安装成功
一)、参考链接
Conda 或 Miniconda 的安装使用这里就不详述了。参考链接:
Linux 下非 root 用户 Conda 安装生物信息 R 软件包 CellMix 演示 https://www.learndiary.com/2022/05/linux-conda-cellmix/

二)、安装步骤:

conda create -n gcc94 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge binutils gcc=9.4 binutils
conda activate gcc94

这里还需要把 conda 里的 gcc 和 ld 链接到 /usr/bin 下面:

sudo mv /usr/bin/gcc /usr/bin/gcc.orig -v
sudo mv /usr/bin/ld /usr/bin/ld.orig -v
sudo ln -sv $CONDA_PREFIX/bin/gcc /usr/bin
sudo ln -sv $CONDA_PREFIX/bin/ld /usr/bin

然后用上面“三”里面安装 nvidia 驱动的通用步骤即可。

七、编译安装 gcc 9 后再安装 nvidia 驱动
一)、参考链接:
Compile and install gcc-9.3.0 https://gist.github.com/yosoufe/ad45f45c10fe08abecbf53000d0d199f
下载 https://ftp.gnu.org/gnu/gcc/gcc-9.3.0/

二)、安装步骤

sudo yum install flex bison texinfo gcc-c++
cd gcc-9.3.0
mkdir build
./contrib/download_prerequisites --directory=build
cd build
../configure --prefix=/usr/local --disable-multilib --with-system-zlib --enable-languages=c,c++,d,fortran,go,objc,obj-c++ # 仅 --enable-languages=c 也行
make -j4
sudo make install -j4

这里还需要把编译的 gcc 链接到 /usr/bin 下面:

sudo mv /usr/bin/gcc /usr/bin/gcc.orig
sudo ln -sv /usr/local/bin/gcc /usr/bin/gcc

然后用上面“三”里面安装 nvidia 驱动的通用步骤即可。

八、用自带 gcc 4.8.5 编译 5.4 内核再安装 nvidia 驱动
一)、参考链接:
How to compile and install Linux Kernel 5.4.1 from source code https://www.cnblogs.com/ztguang/p/12644257.html
注意:
1、这里可以借用 elrepo-kernel 源里的 5.4 内核的编译配置文件 /boot/config-5.4*,把它在内核源码文件夹另存为 .config,再执行 make oldconfig 生成新的内核编译配置文件即可。
2、我试了一下,新的 5.4 内核用自带的 gcc 4.8.5 编译出错,报告:

./include/linux/bitfield.h:50:4: error: expected expression before 'char'
    char: (unsigned char)0,   \

经测试,内核 5.4.207 可以用自带的 gcc 4.8.5 编译安装成功。

二)、安装步骤:
在新编译安装的5.4.207内核下,使用自带的 gcc 4.8.5,用上面“三”里面安装 nvidia 驱动的通用步骤即可。

九、小结
从上面的测试中可以看出,nvidia 驱动模块的安装主要跟内核使用的编译工具集版本和当前安装驱动使用的编译工具集版本特性是否匹配有关。内核的 gcc 编译器版本是9.3.1,安装nvidia驱动模块的 gcc 编译器版本这里使用 9.3.1、9.4.0、9.3.0 都可以。内核和驱动同时使用自带的 gcc 4.8.5 也行。另外,ld 的版本也要匹配。

另外,经过测试发现,使用 conda 安装和自编译的工具集,需要把 gcc 链接到 /usr/bin 下面,conda 安装还需要把 ld 链接到 /usr/bin 下面。

需要在新装内核时 dkms 自动部署 nvidia 驱动,每种情况都需要把真实使用的 gcc 软链接到 /usr/bin/gcc。

请注意我所测试的版本和环境,不一定长期有效,也不一定任何环境有效,仅供参考。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值