訪客留言簿

星期三, 10月 26, 2011

[Ubuntu] 解決 linux 核心升級後 VirtualBox 無法執行編譯問題

前言

如果你試了別人提供的方法還是不行的話,也許這篇能幫上忙,但也可能是別的問題,不一定的,請自己試著看錯誤訊息推理一下。

症狀

升級 linux Kernel 或 vbox 版本後,執行 VirtualBox 會跑出一些錯誤訊息,要你輸入下面指令來重編程式。

/etc/init.d/vboxdrv setup

到終端機照著跑(記得先打 sudo 空一格再照著填)後,又跑出下面的訊息。

* Recompiling VirtualBox kernel modules
* Look at /var/log/vbox-install.log to find out what went wrong

用文字編輯器(比如說在終端機打 gedit 再接後面要看的檔案路徑)查看 /var/log/vbox-install.log 會看見以下錯誤。

Error: unable to find the sources of your current Linux kernel. Specify KERN_DIR= and run Make again.

原因

簡單來說,「vbox 不知道你現在使用的 linux kernel 版本,和該版本的原始碼在哪,所以沒辦法編譯程式」,所以把符合版本的 source 裝上去,再指定 source 所在路徑就解決了。

解決

首先,如果不知道你現在用的 linux kernel 版本的話,請打以下指令。

uname -r

接著先去搜尋一下你的 src 有哪些版本的,確認要不要再安裝。

ls /usr/src

請注意看一下 linux-headers 開頭的,有沒有符合你上面 uname 查到的版本,沒有的話,請用下面的指令安裝。

sudo apt-get install linux-headers-`uname -r`

(※註:上述這行指令中的 `uname -r` 會自動幫你填好版本,怕出錯的話,請自己先打 uname -r 再複製版本字串,要 apt-get 安裝時,再用貼上,緊加在 linux-headers- 後,當然要先去掉 'uname -r' 字串再加啦。)

裝好後,請用 export 指令,重新指定 linux 原始碼的資料夾位置。(請注意不要用 sudo 去跑)

export KERN_DIR=/usr/src/linux-headers-`uname -r`/

(※註一:因為這邊要指定正確資料夾位置才行,所以建議用 uname 去幫你自動抓就好,別再手動輸入了。)

(※註二:不清楚現在的 KERN_DIR 設定的話,請執行 export | grep KERN_DIR 這個指令。export 會列出全部設定,用 | 把結果丟給 grep 會幫你抓出有你指定字串的那幾行來顯示。)

將 KERN_DIR 的位置設定好後,請再重新編譯一次 vbox 試試,等個幾分鐘後,應該就會成功編譯好了,接著再重新執行一次看看有沒有問題。

sudo /etc/init.d/vboxdrv setup

USB 2.0

如果你是把 VirtualBox 舊版移除,升級新版的話,一執行,就會跑出個 USB 2.0 怎樣怎樣的問題,所以不給你跑,這時可以選擇去 vbox 的「機器 → 設定值 → USB」項下,關閉 2.0 支援,不過這樣就不能跑 2.0 的速度了。

所以就照警告訊息說的,去下載 VirtualBox Extension Pack 來裝就行了。(請務必安裝與 vbox 版本號相同的 extension pack)

下載好 extension pack 後,先打開 vbox 視窗,再把 pack 的檔案圖示,用滑鼠拖拉到 vbox 視窗內再放開滑鼠左鍵,就能安裝了,這樣應該 USB 2.0 支援就沒問題了。

 

本站著作(不包含圖片、影音以及回應留言)係採用 Creative Commons 姓名標示-非商業性-相同方式分享 2.5 台灣 (中華民國) 授權條款授權