当前位置: 首页 > article >正文

ubuntu 实时系统安装Nvidia驱动

1. 首先禁用nouveau,nouveau是默认显卡驱动(核显)

sudo gedit /etc/modprobe.d/blacklist.conf

添加以下内容:

blacklist nouveau
options nouveau modeset=0

更新系统配置,重启验证是否禁用成功

sudo update-initramfs -u   
sudo reboot
lsmod | grep nouveau

2. 下载合适的显卡驱动

查看非实时内核适配的显卡驱动版本

ubuntu-drivers devices

我的电脑输出:

== /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==
modalias : pci:v000010DEd00002482sv00007377sd0000120Bbc03sc00i00
vendor   : NVIDIA Corporation
manual_install: True
driver   : nvidia-driver-535-server-open - distro non-free
driver   : nvidia-driver-535-open - distro non-free
driver   : nvidia-driver-535-server - distro non-free
driver   : nvidia-driver-470-server - distro non-free
driver   : nvidia-driver-535 - distro non-free recommended
driver   : nvidia-driver-470 - distro non-free
driver   : xserver-xorg-video-nouveau - distro free builtin

然后进入网站Index of /XFree86/Linux-x86_64/535.183.01下载相关驱动,这里我下载的版本是

NVIDIA-Linux-x86_64-535.183.01.run

如果安装的版本不对,安装之后输入nvidia-smi会出现报错:

Failed to initialize NVML: Driver/library version mismatch
NVML library version: 535.181

3. 安装过程

在主目录下创建install-nvidia.sh文件

sudo gedit install-nvidia.sh

将install-nvidia.sh文件添加如下内容,且修改NV_FILE的对应文件

#!/bin/bash
 
BUILD_BASE=`pwd`
NV_FILE="NVIDIA-Linux-x86_64-xxx.run"  # 这里改成自己下载的.run文件名(之前安装过的)
#NV_URL="https://us.download.nvidia.cn/XFree86/Linux-x86_64/430.50/${NV_FILE}"  # 之前已经下好了显卡驱动.run文件,就不用从网上下载了,直接注释掉,而且如果要下载的话,则慢
NEED_TO_COMPILE_NV_KO=1
 
function clean_env() {
 
    [ -d ./${NV_DIR} ] && rm -rf ./${NV_DIR}
}
 
function check_env() {
    
    # check if in rt kernel
    uname -r | grep rt 1>/dev/null 2>&1 
    if [ $? -ne 0 ]
    then
        echo "Not in rt kernel, Please install apollo kernel and reboot machine first."
        exit 2
    fi
 
    # check if nv ko already in kernel
    if [ ! -f /lib/modules/`uname -r`/kernel/drivers/video/nvidia.ko ]
    then
        export NEED_TO_COMPILE_NV_KO=1
    fi
}
 
function prepare_nv() {
 
    ## download nv install file from nvidia home page 
    #if [ ! -f ./${NV_FILE} ]
    #then
    #   echo "Downloading ${NV_FILE} from nvidia website..."
    #    wget ${NV_URL} -O ${NV_FILE}
    #    if [ $? -ne 0 ]
    #    then
    #        echo "Downloading ${NV_FILE} failed, please check your network connection!"
    #        rm -rf ./${NV_FILE}
    #        exit 1
    #    fi
    #fi
    ###########上面是下载驱动的代码,我们已经提前下载好了,就不需要这段代码了,直接注释掉############
 
    # +x 
    chmod +x ./${NV_FILE}
    echo "Extracting nvidia install run file..."
    ./${NV_FILE} -x 1>/dev/null 2>&1
    NV_DIR="`echo ${NV_FILE} | awk -F '.run' '{print $1}'`"
    NV_VERSION="`echo ${NV_FILE} | awk -F '-' '{print $4}' | awk -F '.run' '{print $1}'`"
 
    export NV_DIR
    export NV_VERSION
    export NVIDIA_SOURCE="${NV_DIR}/kernel"
}
 
function install_lib() {
   
    NV_LIB_OUTPUT_PATH="/usr/lib/x86_64-linux-gnu/"
    NV_BIN_OUTPUT_PATH="/usr/bin/"
 
    [ -f ./${NV_DIR}/libnvidia-ml.so.${NV_VERSION} ] && /bin/cp -f ./${NV_DIR}/libnvidia-ml.so.${NV_VERSION} ${NV_LIB_OUTPUT_PATH}
    [ -f ./${NV_DIR}/libnvidia-fatbinaryloader.so.${NV_VERSION} ] && /bin/cp -f ./${NV_DIR}/libnvidia-fatbinaryloader.so.${NV_VERSION} ${NV_LIB_OUTPUT_PATH}
    [ -f ./${NV_DIR}/libnvidia-ptxjitcompiler.so.${NV_VERSION} ] && /bin/cp -f ./${NV_DIR}/libnvidia-ptxjitcompiler.so.${NV_VERSION} ${NV_LIB_OUTPUT_PATH}
    [ -f ./${NV_DIR}/libcuda.so.${NV_VERSION} ] && /bin/cp -f ./${NV_DIR}/libcuda.so.${NV_VERSION} ${NV_LIB_OUTPUT_PATH}
    [ -f ./${NV_DIR}/nvidia-modprobe ] && /bin/cp -f ./${NV_DIR}/nvidia-modprobe ${NV_BIN_OUTPUT_PATH}
    [ -f ./${NV_DIR}/nvidia-smi ] && /bin/cp -f ./${NV_DIR}/nvidia-smi ${NV_BIN_OUTPUT_PATH}
 
    chmod +x /usr/bin/nvidia*
    chmod +s /usr/bin/nvidia-modprobe
 
    # link for nvidia
    /bin/rm -rf /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1  /usr/lib/x86_64-linux-gnu/libnvidia-ml.so
    /bin/ln -s /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.${NV_VERSION} /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1
    /bin/ln -s /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1 /usr/lib/x86_64-linux-gnu/libnvidia-ml.so
 
    /bin/rm -rf /usr/lib/x86_64-linux-gnu/libcuda.so  /usr/lib/x86_64-linux-gnu/libcuda.so.1
    /bin/ln -s /usr/lib/x86_64-linux-gnu/libcuda.so.${NV_VERSION} /usr/lib/x86_64-linux-gnu/libcuda.so.1
    /bin/ln -s /usr/lib/x86_64-linux-gnu/libcuda.so.1 /usr/lib/x86_64-linux-gnu/libcuda.so
 
    # take effect
    /sbin/ldconfig 1>/dev/null 2>&1
}
 
function build_nv() {
 
    if [ ${NEED_TO_COMPILE_NV_KO} == 0 ]
    then
        return
    fi
 
    NVIDIA_MOD_REL_PATH='kernel/drivers/video'
    NVIDIA_OUTPUT_PATH="/lib/modules/`uname -r`/${NVIDIA_MOD_REL_PATH}"
    CPUNUM=`cat /proc/cpuinfo | grep processor | wc | awk -F " " '{print $1}'`
 
    export IGNORE_PREEMPT_RT_PRESENCE=true
    cd ${NVIDIA_SOURCE} && make -j ${CPUNUM} module
    cd ${BUILD_BASE}
 
    unset IGNORE_PREEMPT_RT_PRESENCE
 
    mkdir -p ${NVIDIA_OUTPUT_PATH}
 
    [ -f ${NVIDIA_SOURCE}/nvidia.ko ] && cp ${NVIDIA_SOURCE}/nvidia.ko ${NVIDIA_OUTPUT_PATH}
    [ -f ${NVIDIA_SOURCE}/nvidia-modeset.ko ] && cp ${NVIDIA_SOURCE}/nvidia-modeset.ko ${NVIDIA_OUTPUT_PATH}
    [ -f ${NVIDIA_SOURCE}/nvidia-drm.ko ] && cp ${NVIDIA_SOURCE}/nvidia-drm.ko ${NVIDIA_OUTPUT_PATH}
    [ -f ${NVIDIA_SOURCE}/nvidia-uvm.ko ] && cp ${NVIDIA_SOURCE}/nvidia-uvm.ko ${NVIDIA_OUTPUT_PATH}
 
    depmod -a
}
 
# check environment
check_env
 
# prepare for nvidia
prepare_nv
 
# build nvidia.ko
build_nv
 
# install user lib
install_lib
 
# clean environment
clean_env
 
echo "Done to install nvidia kernel driver and user libraries."

添加权限

chmod +x ./install-nvidia.sh

运行脚本,启动驱动

sudo ./install-nvidia.sh

显卡驱动脚本运行无误后,重启

nvidia-smi


http://www.kler.cn/a/544600.html

相关文章:

  • 小米红米手机澎湃2.0解锁BL 绕澎湃社区验证 救砖以及9008授权
  • 优雅的git log输出内容更加醒目
  • 【愚公系列】《Python网络爬虫从入门到精通》007-请求模块requests高级应用(Reguests-HTML)
  • Kubernetes部署OwnCloud网盘服务
  • 基于javaweb的SpringBoot+MyBatis健身房信息管理系统(源码+文档+部署讲解)
  • 深入理解DeepSeek与企业实践(二):32B多卡推理的原理、硬件散热与性能实测
  • 06:串口通信
  • python使用虚拟环境
  • Python 依赖管理的革新——Poetry 深度解析
  • C# Dictionary的实现原理
  • 走进 Tcl 语言:历史、特性与应用
  • 数据结构:图论入门
  • JavaSE基本知识补充 -IO流
  • DeepSeek 助力 Vue 开发:打造丝滑的通知栏(Notification Bar)
  • post、get、delete、put请求
  • cnn以及例子
  • AI时代前端工程师的职业发展新路径
  • IS-IS 泛洪机制 | LSP 处理流程
  • 【Unity3D杂谈】使用NDK命令行工具翻译Android Vitals上的内存堆栈
  • 如何部署DeepDeepSeek-V3 大模型部署全流程解析:从云平台到本地化实践Seek—V3