让Ubuntu更新内核时自动编译官方版Nvidia驱动模块

三月 31, 2009

目前Ubuntu 8.10中提供的最新Nvidia显卡驱动依然是180.11,除了不支持一些新的显卡,缺乏一些功能,在有些平台上也不稳定,容易Crash。很多人都用上Nvidia官网版的驱程,可是每当系统更新内核的时候,不得不回到console重新安装一次Nvidia,虽然不是很复杂,但长久如此,也挺麻烦的。

UbuntuForums上面一个Howto介绍了解决方法,下面简述之:

  • 本方法不适合使用EnvyNG安装的驱动。
  • 确保你全手动安装过Nvidia驱动并确定你所用的版本正常工作。

  1. 把NV的驱动安装文件复制到/usr/src,同时建立一链接。

    sudo mv NVIDIA-Linux-x86-180.37-pkg1.run /usr/src
    sudo ln -s /usr/src/NVIDIA-Linux-x86-180.37-pkg1.run /usr/src/nvidia-driver

    我安装的是180.37版本,注意不同版本的文件名不同。链接的作用是以后如果换一个新版的驱动进来,修改该链接即可,不用修改下面的脚本。

  2. 保存下面的代码为文件update-nvidia

    #!/bin/bash
    #
    # Set this to the exact path of the nvidia driver you plan to use
    # It is recommended to use a symlink here so that this script doesn't
    # have to be modified when you change driver versions.
    DRIVER=/usr/src/nvidia-driver
    # Build new driver if it doesn't exist
    if [ -e /lib/modules/$1/kernel/drivers/video/nvidia.ko ] ; then
        echo "NVIDIA driver already exists for this kernel." >&2
    else
        echo "Building NVIDIA driver for kernel $1" >&2
        sh $DRIVER -K -k $1 -s -n 2>1 > /dev/null
        if [ -e /lib/modules/$1/kernel/drivers/video/nvidia.ko ] ; then
            echo "   SUCCESS: Driver installed for kernel $1" >&2
        else
            echo "   FAILURE: See /var/log/nvidia-installer.log" >&2
        fi
    fi
    exit 0

  3. 把该脚本复制到/etc/kernel/postinst.d

    sudo mkdir -p /etc/kernel/postinst.d
    sudo install update-nvidia /etc/kernel/postinst.d

    install命令作用跟cp差不多,只是自动修改文件的权限为rwxr-xr-x

  4. OK,完成了。如果想测试一下是否已经成功,试试装个旧内核

    sudo apt-get install linux-image-2.6.27-10-generic

    稍候应该会看到最后会有一下停顿,然后看到SUCCESS: Driver installed for kernel ...
    再把这个包puege掉即可:

    sudo apt-get purge linux-image-2.6.27-10-generic

tags: , , , ,
posted in Unix/Linux by PT

Follow comments via the RSS Feed | 留下评论 | Trackback URL

Leave Your Comment

注意: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。使用'@all ',将会将评论发送给之前所有其它评论者。请务必注意user必须和评论者名相匹配(大小写一致)。

Page optimized by WP Minify WordPress Plugin

 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org