香港の旺角電脳中心で買った 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 などのディストリビューションのアップデートに頼らずに、 カーネルのバージョンアップを行なっている場合は、 カーネルソースツリーに組み込んでおく方が、 ドライバ込みでカーネルを再構築できるので手間が省ける。
それから5年…
ジャンク入手しましたが、ONKYO C101は同様にnomuxを指定する必要があります。
無線LANもたしかにVNT-6656ですがXubuntu14.04βでは自動認識可能。
ONKYO CORPORATION
ONKYOPC
とIDはあるものの、ONKYOブランドのPCは全部同じだとすると
まとめてblacklistに入れていいものか?とも…
GRUB設定のGUIツールが標準のリポジトリーにあればなぁ…
Comment by vaidurya — 2014年4月16日 @ 22:13