BeagleBoard上のAndroidでWacomのペンタタブレットを使う

今回は、Wacomペンタブレットを、BeagleBoard上のAndroidで利用出来るようにする。
使用するタブレットは、FAVOという自宅にずっと放置されていた古いモデル:

タブレットLinux向けのドライバは、Web上で公開されているので、これを上手く利用してAndroid向けのドライバを作成する事にする。

WacomタブレットLinux向けドライバ

Wacomペンタブレットバイスは、W8001というチップセットを内部で使用しているらしく、このチップセット向けのLinuxデバイスドライバのソースは、Web上で公開されている。

SourceForgeで公開されている、WacomタブレットのLinux向けドライバのWebページから、適切なカーネルバージョンのドライバソースを取得する。
今回は、2.6.26〜2.6.36向けのドライバソースであるinput-wacomを利用する。
input-wacomの中にもバージョンがいくつかあるようだが、今回は、input-wacom-0.11.0.tar.bz2を取得する。

ドライバモジュールのコンパイル・インストール

autotools

input-wacomのWikiページを見ると、ドライバは、autotoolsを利用してコンパイル可能だと説明されている。
私は、autotoolsという名前は聞いたことがあるものの、詳細については知らなかった。どの様な役割を果たし、どう使うのかに関しては、Kazuyaさんのautoconfに関するページが非常に参考になった。

BeagleBoard(ARMプロセッサ)向けコンパイル・インストール

ただ、今回はautotoolsを使ってコンパイルをする必要はない。なぜなら、BeagleBoard向けにモジュールとしてコンパイルすれば良いことがわかっているし、Makefileを生成するまでもなく、それを実行するためには、以下のmakeを実行すれば良いからである:

> make ARCH=arm CROSS_COMPILE=/home/hide/workspace/git/myFroyo/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi- -C /home/hide/workspace/git/myFroyo/kernel SUBDIRS=/home/hide/workspace/input-wacom-0.11.0/2.6.30 modules

これにより、/home/hide/workspace/git/myFroyo/kernelのカーネルコンフィギュレーションを使って、BeagleBoard向けのドライバモジュールが/home/hide/workspace/input-wacom-0.11.0/2.6.30以下に作成される。作成されるモジュールは、wacom.koと、wacom_w8001.koの2つである。

次に作成したモジュールをBeagleBoardに転送する:

> ./adb -s 20100720 push /home/hide/workspace/input-wacom-0.11.0/2.6.30/wacom.ko /system/lib/modules/wacom.ko
> ./adb -s 20100720 push /home/hide/workspace/input-wacom-0.11.0/2.6.30/wacom_w8001.ko /system/lib/modules/wacom_w8001.ko

ADBを使ってホストPCからAndroidにリモートシェルでアクセスし、モジュールをインストールする:

adb> insmod /system/lib/modules/wacom.ko
adb> insmod /system/lib/modules/wacom_w8001.ko

インストール後に、ペンタブレットバイスAndroidに接続すれば、認識されてインプットデバイスとして利用することが出来るようになる。

モジュールインストールの自動化

WiFiモジュールの起動時インストールと同様に、ペンタブレットバイスのモジュールも起動時にインストールされるように設定する。

まず、WiFi設定時に作成した/system/etc/init.omap3.shをAndroidからホストPCに転送する:

> ./adb -s 20100720 pull /system/etc/init.omap3.sh /home/hide/workspace/android_init/init.omap3.sh

取得したinit.omap3.shに以下のインストールコマンドを追記する:

--- init.omap3.sh.org    2011-06-19 22:43:34.000000000 +0900
+++ init.omap3.sh    2011-06-19 13:34:24.000000000 +0900
@@ -6,3 +6,7 @@
 netcfg ra0 up
 netcfg ra0 dhcp
 
+# enable Wacom pen tablet
+insmod /system/lib/modules/wacom.ko
+insmod /system/lib/modules/wacom_w8001.ko
+

追記したinit.omap3.shをAndroidに転送し、スクリプトを更新する:

> ./adb -s 20100720 push /home/hide/workspace/android_init/init.omap3.sh /system/etc/init.omap3.sh

最後に、ADB経由でAndroidを再起動する

> ./adb -s 20100720 reboot-bootloader

この再起動以降は、起動時に自動的にドライバモジュールがインストールされるようになり、何もしなくても起動直後からペンタブレットバイスを利用出来るようになる。

終わりに

以上、WacomペンタブレットAndroid上で利用するためのコンパイル・インストール手順をご紹介した。
実際に作業をしてみて、思っていたより簡単に目的が達成出来ることが分かった。
これはAndroidカーネルとしてLinuxを使用しているお陰と言えるかもしれない。つまり、カーネルモジュールのクロスコンパイルの方法さえ分かっていれば、Linuxデバイスドライバソースコードを使って簡単にAndroid向けのドライバモジュールが作成できるわけである。

参考文献

Linuxデバイスドライバ全般に関しての見識を得るためには、必携:

Linuxデバイスドライバ 第3版

Linuxデバイスドライバ 第3版