替Chromeos加上nvidia驅動程式

 Sat, 28 Nov 2009 22:59:44 +0800

之前試用Chromeos時,在我的機器上跑起來非常慢,而且一段時間就會當掉。在噗浪上看到Jserv大大的噗說,Chromeos的window manager使用到Clutter這個函數庫,於是去http://www.clutter-project.org/網站看了一下,發現這個函數庫底層除了xlib,最主要的就是包裝OpenGL做出來的GUI API...所以強烈懷疑是因為驅動程式沒有支援硬體3D加速所以才讓Chromeos跑得那麼慢。(我的Asus U6S搭的是nvidia的8400M G)

所以就來自己手動把nvidia的驅動程式加到chromeos吧。

我使用的平台是Ubuntu 9.04。以下提到的方法會需要一些先備知識,包括:怎樣自己建構編譯出可執行的Chromeos、一些核心編譯的知識、一些軟體編譯的知識、把disk image掛載到檔案系統、chroot及下面提到的一些其他命令。(我不會詳細把命令列出來,所以最好熟悉這些命令)

作法

  1. 到nvidia網站下載最新的linux驅動程式,是一個以.run結束的可執行檔,我使用的應該是190.42這個版本
  2. 用-x參數來執行,他會把所有檔案解出到一個與檔名相同的目錄(不含.run)。然後把usr/src/nv(應該沒記錯)目錄拷貝到chromeos開發的chroot環境中(應該是在chromiumos/src/chroot)
  3. 在chromeos開發的chroot環境中,在執行完build_platform_package.sh, build_kernel.sh, build_image.sh後,進入到上述目錄,使用make module SYSSRC=/path/to/the/kernel/source(這個目錄會在~/trunk/src/build/kernel/{kernel_name}/{kernel_version}(希望沒記錯,有錯等一下再改))命令來建構nvidia的kernel module。完畢後會在nv目錄裡面產生nvidia.ko。(之前想要用dkms來做,但是發現有點麻煩,所以放棄了。如果真的要使用dkms的話,需要修改Makefile.kbuild來配合環境)
  4. 接下來需要手動安裝這個kernel module,把剛剛用build_image.sh建構好的disk image(檔名叫做rootfs.image,會放在~/trunk/src/build/image/{build_version}目錄底下)掛載到檔案系統中,使用install命令把nvidia.ko安裝到disk image掛載目錄底下的/lib/modules/{kernel_name}/kernel/drivers/video目錄中。然後執行depmod命令來更新dependency檔。(要用哪些參數請自行man一下,需要用到正確的System.map、指定正確的version及檔名)
  5. 接下來需要離開X,用sudo init 1然後選擇使用root帳號
  6. 把剛剛的rootfs.image掛到檔案系統,然後可以先執行步驟1提到的執行檔,加上-A來看看有哪些進階參數可以用,需要指定所有安裝細節的目錄選項,並且選擇不執行kernel module的安裝選項,(用到的大概有十幾個選項,而且要加上許多完整目錄名稱以指到rootfs.image中的相關目錄,所以落落長,最好做成script來跑,這樣也方便調整參數)來進行X Window驅動程式、extension以及一些軟體、動態程式庫的安裝。安裝完畢後,chroot到rootfs.image掛載的目錄,執行ldconfig -v來確保上面的東西有正確安裝。
  7. 修改rootfs.image掛載目錄中的etc/X11/xorg.conf,適當調整參數,需要把driver指定為'nvidia',並且載入glx模組。
  8. 修改rootfs.image掛載目錄中的boot/extlinux.conf,拿掉i915.modeset=1核心參數
  9. 使用image_to_usb.sh把chromeos安裝到usb隨身碟(至少需要4G),然後用他開機
  10. Chromeos跑起來就非常快

過程這麼複雜,主要是因為nvidia驅動程式安裝方式無法與chromeos建構的過程搭配,所以需要把安裝過程拆成kernel module及X兩部份。另外一個我自己不太熟的是xorg.conf,所以花了一點時間嘗試錯誤,其實nvidia的驅動程式裡面有非常詳細的readme可以參考。

測試結果

沒有使用nvidia的官方驅動程式時,在xterm使用top,會看到chromeos_wm使用cpu大約在14%,安裝好以後...嘿嘿,平均是0%,速度超快,而且不會當掉了。

(昨天更新source時,看到ibus-chewing目錄喔,不過好像還沒放進platform package的建構中,應該不久就會有新酷音輸入法可以用了)


2009-11-30 21:43 by Fillano

我把檔案上傳到一個分享伺服器,可以下載來跑跑看。(請使用chromiumos的image_to_usb.sh來把他放入USB隨身碟。另外,這個影像檔只支援nvidia的顯示卡,別的顯示卡跑起來會出問題。)


http://www.keepandshare.com/doc/view.php?u=1580589