ubuntu 显卡驱动与gcc版本不匹配,升级gcc为9.3.0&&&ubuntu重启后显卡挂了:报错NVIDIA-SMI has
一、 ubuntu 显卡驱动与gcc版本不匹配,升级gcc为9.3.0
先决条件
root管理权限
su root
# 或者
sudo root
准备工作
1_1下载GCC-9.3.0安装包
wget https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-9.3.0/gcc-9.3.0.tar.gz
1_2 解压安装包
tar -xvf gcc-9.3.0.tar.gz
1_3进入GCC解压目录
cd gcc-9.3.0
2_1下载依赖版本gmp-6.1.0
wget https://mirrors.tuna.tsinghua.edu.cn/gnu/gmp/gmp-6.1.0.tar.xz
解压
tar -xvf gmp-6.1.0.tar.xz
改名成需要的目录名
mv gmp-6.1.0 gmp
2_2 下载依赖版本mpfr-3.1.4
wget https://mirrors.tuna.tsinghua.edu.cn/gnu/mpfr/mpfr-3.1.4.tar.gz
解压
tar -xvf mpfr-3.1.4.tar.gz
改名成需要的目录名
mv mpfr-3.1.4 mpfr
2_3 下载依赖版本mpc-1.0.3
wget https://mirrors.tuna.tsinghua.edu.cn/gnu/mpc/mpc-1.0.3.tar.gz
解压
tar -xvf mpc-1.0.3.tar.gz
改名成需要的目录名
mv mpc-1.0.3 mpc
其依赖关系为 gcc
->mpc
->mpfr
->gmp
->m4
编译安装
1 设置配置信息
建立编译目录,并进入
mkdir gcc-build
cd gcc-build
#(/usr/local/gcc-9.3.0是新版本GCC的安装目录,可以更换,原始gcc运行目录为/usr/bin/gcc)
../configure --prefix=/usr/local/gcc-9.3.0 --disable-multilib --enable-languages=c,c++
2 编译
# 4是cpu核心数,可根据cpu核数设置,因为编译过程很长,尽可能使用全部cpu资源
make -j 4
3 安装
make install -j 4
替换命令链接和配置环境变量
1. 替换gcc cc命令的链接
ln -s /usr/local/gcc-9.3.0 /usr/local/gcc
ln -s /usr/local/gcc-9.3.0/bin/gcc /usr/local/cc
如果发生错误 可以先备份原来的链接比如
mv /usr/local/gcc /usr/local/gcc.bak
mv /usr/local/cc /usr/local/cc.bak
2. 配置环境变量
将以下配置写入环境变量中,如全局变量/etc/profile
或个人变量~./.bashrc
文件最后
export PATH=/usr/local/gcc/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/gcc/lib64
export MANPATH=/usr/local/gcc/share/man:$MANPATH
3. 使用 . /etc/profile 或 . .bashrc 可以更新环境变量(注意有一个’.')
检查安装是否成功
使用以下命令
gcc -v
g++ -v
cc -v
可以得到类似的结果说明安装成功
使用内建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/gcc-9.3.0/libexec/gcc/x86_64-pc-linux-gnu/9.3.0/lto-wrapper
目标:x86_64-pc-linux-gnu
配置为:../configure --prefix=/usr/local/gcc-9.3.0 --disable-multilib --enable-languages=c,c++
线程模型:posix
gcc 版本 9.3.0 (GCC)
正常安装显卡驱动或cuda即可,注意gcc与cuda的匹配。
二、 ubuntu重启后显卡挂了:报错NVIDIA-SMI has failed
ubuntu重启以后开机显卡挂了
nvidia-smi
报错信息:
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.
中文意思:NVIDIA-SMI
失败了,因为它无法与英伟达驱动程序通信。请确保安装并运行了最新的NVIDIA驱动程序
。
也就是说他的驱动程序不行了,得安装新版本驱动。然后一顿重装驱动,解决,但是次数多了恐怕不行。
深究其底层原因
重启之前好使,说明驱动正常,重启之后不好使,说明驱动损坏。不一定每次重启都挂掉驱动。检查原因,是因为自动更新内核导致,只要更新了内核,原来的驱动向上不兼容导致出问题。
如何解决
1. 禁用更新啊,内核不更新不就
2. 重装驱动啊,这不就是我原来的笨方法吗
3. 自动化重装驱动啊,好的,重点来了
一个非常好的想法是我动态的根据内核版本来对我的驱动进行编译(事实上就是重装,但是期望他是自动执行的)。但是如何实现呢?
我可不会写代码啊,问题不大,前任已经写好啦。呐:DKMS
全称是Dynamic Kernel Module Support
,它可以帮我们维护内核外的这些驱动程序,在内核版本变动之后可以自动重新生成新的模块。 不只是显卡驱动是这个bug
啊,多数都有这个毛病。
命令命令
sudo apt-get install dkms
sudo dkms install -m nvidia -v 455.23.04 #455.23.04 是安装驱动的版本
附
查看dkms管理的驱动
dkms status 显示
没有执行sudo dkms install -m nvidia -v 455.23.04之前
之后
nvidia, 455.23.04, 5.8.0-38-generic, x86_64: installed
。