Wiiリモコンで操作できるプレゼン・マシンの製作(1) ―― オリジナルのAndroidマシンを自作する
tag: 組み込み ディジタル・デザイン
技術解説 2009年9月11日
2.Userlandの構築
●Bluetooth USBアダプタ向けの修正を行う
Wiiリモコンは,BluetoothのHID(Human Interface Device)として実装されています.Wiiリモコンを動作させる準備として,まずBluetooth USBアダプタを動作させるための修正を行います.
AndroidではBluetoothモジュールの電源制御にRF KillというKernelの機能(Switch Class)を使用しますが,Bluetooth USBアダプタはこの仕組みに対応していません.Bluetoothの電源制御はlibbluedroidライブラリで実施しており,このソース・コードを修正する必要があります.
上記のパッチをホーム・ディレクトリに置き,patchコマンドで変更を適用します.
$ cd ~ / mydroid /
$ patch -p1 < ~ / ignore_rfkill.patch
●バッテリを持たないデバイス向けの修正を行う
BeagleBoardはバッテリを持たないため,バッテリ残量が0%とみなされ,Android起動直後に低バッテリの警告がポップアップします.これに対応するため,バッテリ・サービスのバッテリ状態の設定処理を修正します(警告がでるだけなので,必須ではない).
上記のパッチをホーム・ディレクトリに置き,patchコマンドで変更を適用します.
$ patch -p1 < ~ / no_battery.patch
●マウスを有効化する
Androidはデフォルトでタッチ・スクリーンとトラック・ボールに対応していますが,マウス(ポインティング・デバイス)に対応しておらず,マウス・カーソルも表示されません.このパッチを適用せずにマウスを接続した場合,おかしな挙動になります.Wiiリモコンはマウスとしてエミュレートして動作させるため,Androidでマウス操作を可能にするための修正を行います.
上記のパッチをホーム・ディレクトリに置き,patchコマンドで変更を適用します.
$ patch -p1 < ~ / mouse-cursor_and_wheel-event.patch
●キー・レイアウト・ファイルを修正する
Androidでは,インプット・デバイスごとにキー・レイアウト・ファイル(Androidのキー名とキー・コードのマップ・ファイル)を持つことができます.デフォルトではエミュレータ用のキー・マップ・ファイル(qwerty.kl)がインストールされます.このデフォルトのキー・レイアウト・ファイルはBACK(戻る)が専用ボタンにのみ割り当てられているため,EscキーにもBACKを割り当てます.
●initプロセス設定ファイルを修正する
Androidのinitプロセスが使用する設定ファイル(init.rc)を修正します(※4).initの"init"トリガのアクションとして,ルート・ファイル・システムをread only(ro)で再マウントする処理が含まれていますが,この処理はKernelパニック(致命的なエラーによる処理の停止)を引き起こしてしまうため,コメント・アウトします(※5).また,Androidが使用するサウンド関連のデバイス・ノードはLinux標準の"/dev/snd/"配下ではなく"/dev/"となっているため,正常に起動できません.これに対応するため,init.rdに"/dev/snd/"配下のデバイス・ノードに対するシンボリック・リンクを"/dev/"に作成する処理を追加します.
※4 initプロセスはinit.rcの他に"/proc/cpuinfo"の"hardware"の項目からハードウェア名を取得し,"init.<ハードウェア名>.rc"も読み込んでいるので,本来はこちらに記述するのが正しいです(この場合,MACHINE_STARTで指定するハードウェア名の修正が必要になる).
※5 yaffs2のマウント処理も必要ありませんが,マウントに失敗するだけで無害なのでそのままにしてあります.
●Homeキーを有効化する
デフォルトでは携帯電話向けに,SIMのアクティベーションが完了するまで,Homeキーを無効にする処置を行っています.これに対応するため,system.propファイルにHomeキーを有効にするプロパティを設定しておきます.