dkms Case Study : Nvidia Driver HowTo [論壇 - 新手村]


正在瀏覽:   1 名遊客


 到底部   前一個主題   下一個主題  [無發表權] 請登錄或者註冊

(1) 2 »


PeterPan
dkms Case Study : Nvidia Driver HowTo
Anon:PeterPan
dkms Case Study : Nvidia Driver HowTo

Author : PeterPan (訪客)

===============
午安各位

這一篇誠心認真之作, 完全是為了真正解決新手問題.

對於這輕鬆詼諧的作品, PeterPan 不想再提及任何關於腦袋有沒有洞的論證.

或是什麼人間最強兵器 畢竟氣消了什麼都好說

開始之前,

大家可以先看一下這兩篇:

http://www.ubuntu-tw.org/modules/newbb/viewtopic.php?topic_id=19427&forum=22&post_id=99113#forumpost99113
http://www.ubuntu-tw.org/modules/newbb/viewtopic.php?topic_id=19431&forum=1&post_id=99277#forumpost99277

每每有新手上來發問關於Driver的安裝, 有些人總是叫別人 make install clean

此法針對當前的kernel當然沒問題, 然而我們必須考量到新使用者的問題.

他們或許出來乍到, 不了解kernel版本更新後, 用前法安裝的Driver 都要re-compile

於是乎, 當某次Update 之後, 你又會看到這種討論:

*更新kernel之後網卡無法使用
*更新之後進不了X

當然, 您可叫他們再編譯一次..再編譯一次..再編譯一次..再編譯一次..再編譯一次... 直到他開心 您滿意為止

我不是說這種方式腦袋有洞, source就算不見 ,也是能重抓,重編的方法雖然不怎麼優雅高明, 但的確也勉強有效,

但考量到一個情況:

假設你今天編的是顯示卡Driver , 傻傻的用Updata-Manager更新了號稱是新版的kernel,

然後開心的重開機之後發現gdm無法啟動, 而你當下找不到顯卡的source.

您會不會跟Xwindows一樣覺得很X ?


然而如果你願意使用dkms, 能用更為優雅的方式巧妙化解, 不用每次更新的時候滿地找source

PeterPan考量到新使用者的需求, 以及並非所有人都有耐心 或都會用terminal打一堆有的沒的參數

所以特別寫了這兩份 script, 使得操作步驟減至最低.

另一方面也可以讓有心研究原理 或是正在學習的人一個不錯的參考方式


=========================
下面為簡述等等會貼上的script的使用方式:

第一步: 先將顯示卡Driver移除(如果有) 這裡用Nvidia為例, 他大概是叫 nvidia-glx-<版本號>

用你的apt-get 或是如果你喜歡圖形介面 可以開Synaptic

移除的工作 PeterPan 就不詳述

再來 確認好你的 kernel-header

然後去下載顯示卡Driver, 譬如Nvidia的:

http://www.nvidia.com.tw/Download/index.aspx?lang=tw

假設你抓了 190.42 的版本, 把他放在你的家目錄裡

接下來, 開兩個新檔案 分別命名為 install.sh preinstall.sh , 從這裡複製這兩份script貼上

這裡稍微注意一下: 把這兩份 script改為可執行 -- 你可以chmod 或是單純按右鍵Properties -> permissions 標籤裡有一個Execute, 勾他.

install.sh preinstall.sh 跟你剛剛下載下來的Nvidia Driver安裝檔要放在 ' 同一個目錄下 "


最後: 打以下指令就好:

sudo sh ./preinstall.sh 190.42

如果你不是用 190.42版本 , 就把他改成你下載的版本號

或是你可以再第二個參數直接輸入NV-Installer的名稱


安裝完了 開心嗎

之後每次你更新 或是重編了kernel, dkms會偵測到並且自動幫你re-compile 這個driver


最後如果您有興趣, 你可以打指令:

dkms status

來看看您到底裝了什麼


最後題外話 , script 貼在這, 歡迎任何形式轉載修復改良

理論上不會出現 但假使有Bug或是有什麼要改也可以回覆在下面


就這樣吧 ~ 感謝

2009/11/14 14:49 | 573f4 5dd61 04547 7e644
應用擴展 工具箱
PeterPan
回覆: dkms Case Study : Nvidia Driver HowTo
Anon:PeterPan
#! /bin/sh


# preinstall.sh

#Usage
if [ $# -ne 1 -a $# -ne 2 ]
then
echo "Usage:"
echo $0 DRIVERVERSION [INSTALLERNAME]
exit 1
fi

# 1st arg. (Version)
readonly driver_version=$1
if [ ${#driver_version} -lt 1 ]
then
echo Error: DRIVERVERSION must be a nonempty string
exit 1
fi

# 2nd arg. (filename of NVIDIA-Installer)
if [ $# -ge 2 ]
then
readonly installer_name=$2
else

# generate the Filename (if 2nd arg. is NULL)
if [ "$(uname -m)" = "x86_64" ]
then
readonly archname=x86_64
else
readonly archname=x86
fi
for var1 in ./NVIDIA-Linux-$archname-$driver_version-pkg?.run
do readonly installer_name=$var1
break
done
unset archname var1
fi

# Privilege : for root
if [ "root" != "$USER" ]
then
echo "Are you root ? Must be root to continue ..."
exit 1
fi

sh $installer_name -N --no-kernel-module --no-runlevel-check --accept-license -s

if [ ! -e /etc/X11/xorg.conf ]
then
echo > /etc/X11/xorg.conf 'Section "Device"
Identifier "Device0"
Driver "nvidia"
VendorName "NVIDIA Corporation"
EndSection'
fi
sh ./install.sh $driver_version $installer_name

#EOF

2009/11/14 14:54 | 14ab6 bad5d b3c1f 5da95
應用擴展 工具箱
PeterPan
回覆: dkms Case Study : Nvidia Driver HowTo
Anon:PeterPan
#! /bin/sh

# dkms Case Study
#install.sh : for Nvidia-Installer

#Usage
if [ $# -ne 1 -a $# -ne 2 ]
then
echo "Usage:"
echo $0 DRIVERVERSION [INSTALLERNAME]
exit 1
fi


# 1st argument (Version of NV)
readonly driver_version=$1
if [ ${#driver_version} -lt 1 ]
then
echo DRIVERVERSION must be a nonempty string
exit 1
fi

# 2nd argument (filename of NV-Installer)
if [ $# -ge 2 ]
then
readonly installer_name=$2
else
# generate the Filename
if [ "$(uname -m)" = "x86_64" ]
then
readonly archname=x86_64
else
readonly archname=x86
fi
for var1 in ./NVIDIA-Linux-$archname-$driver_version-pkg?.run
do readonly installer_name=$var1
break
done
unset archname var1
fi

# Relative path to the kernel_source from the unpacked NV-Installer
readonly installer_src_dir=usr/src/nv

# The place to save the sources for this driver-version
# Note: Format required by DKMS: /usr/src/-
readonly dest_src_dir=/usr/src/nvidia-$driver_version

# required Packages for building the kernel-module
readonly package_depency="dkms build-essential make"

# =============================SANITY TEST (Start)=============================================
sanity=1

if [ ! -e $installer_name ]
then
echo "Error: Could not find the NVIDIA-Driver Installer:"
echo $installer_name
echo
sanity=0
fi

echo "* Checking for kernel-sources for the running kernel"

if [ -e /usr/src/linux-headers-$(uname -r) ]
then
echo "Kernel-sources were installed"
else
echo "ERROR: Kernel-sources were not installed"
sanity=0
fi

echo "Important Note: You should install the correct Packages"
echo "for ALL kernels you are using :)"
echo

if [ -e $dest_src_dir ]
then
echo "Warning: Found previous source directory: $dest_src_dir"
echo "Contents would be overwritten !!!"
echo
fi

if [ $sanity -ne 1 ]
then
echo "Exiting in case of Errors"
exit 1
fi
# =====================================SANITY TEST (END) ====================================


# exit on all Errors
set -e

# privilege : root user
if [ "root" != "$USER" ]
then
echo "Are you root? Must be root to continue ..."
exit 1
fi

echo "* Installing necessary packages"
apt-get >/dev/null install $package_depency

echo
echo "Nvidia Driver Version $driver_version"
echo "Nvidia Installer Binary $installer_name"
echo "DKMS Module Directory $dest_src_dir"
echo
echo "Running Kernel $(uname -r)"
echo "Expect Kernel-Sources in /usr/src/linux-headers-$(uname -r)"
echo
echo "DKMS Version $(dkms -V)"


# ******************* Preparing kmodule-srcs (Start) *************************************************
readonly tempdir=$(mktemp -d) || exit 1

echo "* Unpacking installer"
sh $installer_name >/dev/null --extract-only --target $tempdir/installer

# delete previously existing source directory for the same driver version
if [ -e $dest_src_dir ]
then
rm -rf $dest_src_dir
fi

echo "* Moving kmodule-source to $dest_src_dir"
mkdir $dest_src_dir
cp -r $tempdir/installer/$installer_src_dir/* $dest_src_dir

# create the dkms.conf File, which tells DKMS how to compile the kmodule
echo "* Creating dkms-configuration $dest_src_dir/dkms.conf"
echo > $dest_src_dir/dkms.conf 'PACKAGE_NAME="nvidia"
PACKAGE_VERSION="'$driver_version'"
CLEAN="make clean"
BUILT_MODULE_NAME[0]="nvidia"
MAKE[0]="make module KERNDIR=/lib/modules/$kernelver IGNORE_XEN_PRESENCE=1 IGNORE_CC_MISMATCH=1 SYSSRC=$kernel_source_dir"
DEST_MODULE_LOCATION[0]="/kernel/drivers/video/nvidia"
AUTOINSTALL="yes"'

echo "* Delete temporary directory"
rm -rf $tempdir
# ************************** Preparing kmodule-src (End) ***************************************



# ignore errors
set +e

# =========================== Adding DKMS Module (Start)=========================================
echo "* Removing eventual existing DKMS-Modules for the same driver_version"
dkms remove -m nvidia -v $driver_version --all -q
echo "*** Done. ***"

echo "* Adding Module to DKMS build system"
echo "** Module Name: nvidia $driver_version"
dkms add -m nvidia -v $driver_version

echo "* Doing initial module build"
dkms build -m nvidia -v $driver_version

echo "* Installing initial module"
dkms install -m nvidia -v $driver_version
# ========================Adding DKMS Module (End) =============================================



echo "****** Done. Current Status of DKMS is:"
dkms status
#EOF

2009/11/14 14:55 | 573f4 5dd61 04547 7e644
應用擴展 工具箱
Tim
回覆: dkms Case Study : Nvidia Driver HowTo
Anon:Tim
ATI 顯卡也可以用嗎?

2009/11/16 17:01 | f5519 a39d5 c2e67 a5332
應用擴展 工具箱
回覆: dkms Case Study : Nvidia Driver HowTo
會員五級
註冊日期:
2007/7/17 15:46
所屬群組:
已註冊使用者
等級: 21
HP : 0 / 503
MP : 175 / 20359
EXP: 14
離線
好一個解決方案!!~~
一ㄤ~

2009/11/16 17:09
應用擴展 工具箱
回覆: dkms Case Study : Nvidia Driver HowTo
會員五級
註冊日期:
2007/7/17 15:46
所屬群組:
已註冊使用者
等級: 21
HP : 0 / 503
MP : 175 / 20359
EXP: 14
離線
回Tim ~~@@
似乎不行的說
一ㄤ~

2009/11/16 17:18
應用擴展 工具箱
<>
回覆: dkms Case Study : Nvidia Driver HowTo
Anon:<>
PeterPan 寫到:
畢竟氣消了什麼都好說

我還蠻好奇你之前為了什麼在生氣
還氣到非拖大家下水不可
方便說明一下嘛?

還有你暱稱最好改一改
免得之後又出問題,對大家都不好

2009/11/16 21:05 | a8842 0743b 887b7 099dd
應用擴展 工具箱
回覆: dkms Case Study : Nvidia Driver HowTo
會員五級
註冊日期:
2008/10/7 21:19
所屬群組:
已註冊使用者
等級: 36
HP : 0 / 896
MP : 661 / 33024
EXP: 85
離線
感謝Script,來研究看看

= = = = =

氣消了就好,人家用什麼名字都沒差...

2009/11/16 21:32
I′m UGP
應用擴展 工具箱
UGP
回覆: dkms Case Study : Nvidia Driver HowTo
Anon:UGP
UGP 寫到:
氣消了就好,人家用什麼名字都沒差...

是這樣嗎....

2009/11/16 21:54 | aae25 1f59c 67cbe c5d8d
應用擴展 工具箱
回覆: dkms Case Study : Nvidia Driver HowTo
會員三級
註冊日期:
2008/5/5 16:36
所屬群組:
已註冊使用者
等級: 14
HP : 0 / 345
MP : 83 / 13155
EXP: 81
離線
推~類似的東西在ubuntu us好像看過~
install nvidia driver with dkms support
http://ubuntuforums.org/showthread.php?t=1036788

2009/11/17 0:13
應用擴展 工具箱

(1) 2 »

 [無發表權] 請登錄或者註冊


可以查看帖子.
不可發帖.
不可回覆.
不可編輯自己的帖子.
不可刪除自己的帖子.
不可發起投票調查.
不可在投票調查中投票.
不可上傳附件.
不可不經審核直接發帖.