香港の旺角電脳中心で買った OLEVIA X10A-1160 は、
Ubuntu 8.04 LTS がプレインストールされていた。
そのまま使うぶんには問題無いが、
Ubuntu のアップデートをインストールしてしまうと
(正確に言えばカーネルを更新すると)、
OLEVIA X10A-1160 固有の設定が無効になり、
無線LAN やタッチパッドが使えなくなるなどの問題が生じる。
Ubuntu アップデートを行なった後、
あるいは新規に GNU/Linux (Ubuntu に限らず) をインストールする場合に、
OLEVIA X10A-1160 固有の設定を行なうためのメモ。
OLEVIA X10A-1160 は、
SOTEC C101 と (キーボード配列や天板のデザインを除けば) 同等であるため、
以下の対策は SOTEC C101 に Ubuntu 等の GNU/Linux をインストールして使う場合も、
そのまま適用できるはず。
i8042 のバグ対策を行なってタッチパッドを認識させる
他のいくつかのノートPC
(dynabook Satellite P10,
Thinkpad R31,
Lifebook P7010,
Dell XPS M1530
など)
と同じく、
OLEVIA X10A-1160 (確認していないが、おそらく SOTEC C101 も同様)
のキーボード/マウス コントローラ i8042 互換チップにはバグがある。
OLEVIA X10A-1160 の場合、カーネル起動時に以下のようなログを出力する:
PNP: PS/2 Controller [PNP0303:PS2K,PNP0f13:PS2M] at 0x60,0x64 irq 1,12
i8042.c: Detected active multiplexing controller, rev 1.1.
serio: i8042 KBD port at 0x60,0x64 irq 1
serio: i8042 AUX0 port at 0x60,0x64 irq 12
serio: i8042 AUX1 port at 0x60,0x64 irq 12
serio: i8042 AUX2 port at 0x60,0x64 irq 12
serio: i8042 AUX3 port at 0x60,0x64 irq 12
...(中略)...
input: PS/2 Generic Mouse as /devices/platform/i8042/serio4/input/input9
psmouse.c: Failed to enable mouse on isa0060/serio4
存在しないはずの外付けポート (AUX0~3)
コントローラ (multiplexing controller)
を認識してしまうようだ。
このため、
タッチパッド (SynPS/2 Synaptics TouchPad) が使えなくなってしまう。
この問題は、
カーネルパラメータに i8042.nomux=1 を追加することによって回避できる。
例えば GRUB の設定ファイル /boot/grub/menu.lst に、
title Ubuntu 8.04.1, kernel 2.6.24-23-generic
root (hd0,0)
kernel /boot/vmlinuz-2.6.24-23-generic root=UUID=(省略) ro quiet splash vga=789 i8042.nomux=1
initrd /boot/initrd.img-2.6.24-23-generic
quiet
といった感じで 「i8042.nomux=1」 を追加すればよい。
Linux を再起動すると、
PNP: PS/2 Controller [PNP0303:PS2K,PNP0f13:PS2M] at 0x60,0x64 irq 1,12
serio: i8042 KBD port at 0x60,0x64 irq 1
serio: i8042 AUX port at 0x60,0x64 irq 12
...(中略)...
Synaptics Touchpad, model: 1, fw: 5.10, id: 0x258eb1, caps: 0xa04711/0x0
input: SynPS/2 Synaptics TouchPad as /devices/platform/i8042/serio1/input/input7
などと出力し、
無事 SynPS/2 Synaptics TouchPad が認識できた。
なお Linux は、
i8042 にバグを持つ PC で問題を回避できるよう、
PC のブラックリストを持っている。
すなわち linux/drivers/input/serio/i8042-x86ia64io.h で定義されている配列
i8042_dmi_nomux_table に PC の ID を登録しておくと、
該当する PC では自動的に i8042.nomux=1 が設定される仕掛けだが、
あいにく OLEVIA X10A-1160 は固有の ID を持っていないようだ:
# head /sys/class/dmi/id/{sys_vendor,product_*}
==> /sys/class/dmi/id/sys_vendor <==
==> /sys/class/dmi/id/product_name <==
==> /sys/class/dmi/id/product_serial <==
Not Applicable
==> /sys/class/dmi/id/product_version <==
Not Applicable
DMI のベンダ名、プロダクト名が共に空白になっている。
無線LAN ドライバ vntwusb をインストールする
OLEVIA X10A-1160 (確認していないが、おそらく SOTEC C101 も同様)
は、
無線LAN チップとして VIA Technologies の VT6656 を使用している。
しかし残念ながらこのチップは、
現時点の Linux 標準カーネルではサポートしていない。
したがってドライバをインストールする必要がある。
まず VIA Technologies のサポートページ VT6656 WLAN Linux Driver Source から、
最新版のドライバ vt6656_wlan_linux_v118.zip (1/18 現在)
をダウンロードする。
展開して make すれば、
VT6656 用のカーネルモジュール vntwusb.ko が作られる。
% wget http://www.viaarena.com/Driver/vt6656_wlan_linux_v118.zip
--10:19:24-- http://www.viaarena.com/Driver/vt6656_wlan_linux_v118.zip
=> `vt6656_wlan_linux_v118.zip'
Resolving www.viaarena.com... 74.54.151.131
Connecting to www.viaarena.com|74.54.151.131|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 4,483,650 (4.3M) [application/x-zip-compressed]
0K .......... .......... .......... .......... .......... 1% 68.92 KB/s
...(中略)...
% unzip vt6656_wlan_linux_v118.zip
Archive: vt6656_wlan_linux_v118.zip
creating: VT6656_WLAN_Linux_V118/
creating: VT6656_WLAN_Linux_V118/driver/
...(中略)...
% cd VT6656_WLAN_Linux_V118/driver
VT6656_WLAN_Linux_V118/driver % make
make -C /lib/modules/2.6.24-23-generic/build SUBDIRS=/home/sengoku/VT6656_WLAN_Linux_V118/driver modules
make[1]: ディレクトリ `/usr/src/linux-headers-2.6.24-23-generic' に入ります
CC [M] /home/sengoku/VT6656_WLAN_Linux_V118/driver/main_usb.o
...(中略)...
LD [M] /home/sengoku/VT6656_WLAN_Linux_V118/driver/vntwusb.ko
make[1]: ディレクトリ `/usr/src/linux-headers-2.6.24-23-generic' から出ます
あとは、make install して modprobe vntwusb するだけ。
VT6656_WLAN_Linux_V118/driver % sudo make install
make -C /lib/modules/2.6.24-23-generic/build SUBDIRS=/home/sengoku/VT6656_WLAN_Linux_V118/driver modules
mkdir -p /lib/modules/2.6.24-23-generic/kernel/drivers/net
install -m 644 -o root vntwusb.ko /lib/modules/2.6.24-23-generic/kernel/drivers/net
/sbin/depmod -a || true
VT6656_WLAN_Linux_V118/driver % sudo modprobe vntwusb
ただし前もって、
カーネルモジュールを make するための環境を整えておく必要がある。
Ubuntu (というか debian) の場合であれば、
module-assistant パッケージと linux-headers パッケージをインストールしておけばよい。
あるいは、
上記 VT6656_WLAN_Linux_V118/driver ディレクトリを、
Linux カーネルソースにコピーしてカーネルを再構築してもよい。
私は、
Linux カーネルソースツリーに、
linux/drivers/net/wireless/vntwusb ディレクトリを作って、
VT6656_WLAN_Linux_V118/driver ディレクトリの内容をコピーし、
linux/drivers/net/wireless/Kconfig および
linux/drivers/net/wireless/Makefile に以下のパッチをあてている。
--- linux-2.6.27.11.org/drivers/net/wireless/Kconfig 2008-10-10 07:13:53.000000000 +0900
+++ linux-2.6.27.11/drivers/net/wireless/Kconfig 2009-01-06 14:52:10.459276155 +0900
@@ -702,5 +702,6 @@
source "drivers/net/wireless/b43legacy/Kconfig"
source "drivers/net/wireless/zd1211rw/Kconfig"
source "drivers/net/wireless/rt2x00/Kconfig"
+source "drivers/net/wireless/vntwusb/Kconfig"
endmenu
diff -ur linux-2.6.27.11.org/drivers/net/wireless/Makefile linux-2.6.27.11/drivers/net/wireless/Makefile
--- linux-2.6.27.11.org/drivers/net/wireless/Makefile 2008-10-10 07:13:53.000000000 +0900
+++ linux-2.6.27.11/drivers/net/wireless/Makefile 2009-01-06 14:52:10.491275159 +0900
@@ -58,6 +58,7 @@
obj-$(CONFIG_IWLWIFI) += iwlwifi/
obj-$(CONFIG_RT2X00) += rt2x00/
+obj-$(CONFIG_VNTWUSB) += vntwusb/
obj-$(CONFIG_P54_COMMON) += p54/
Ubuntu などのディストリビューションのアップデートに頼らずに、
カーネルのバージョンアップを行なっている場合は、
カーネルソースツリーに組み込んでおく方が、
ドライバ込みでカーネルを再構築できるので手間が省ける。