2011年01月18日
Androidのシリアルコンソールで^Cが効くようにする方法
Androidのシリアルコンソールでは^C(コントロールC)によるコマンドの強制終了が効きません。
そのため、シリアルコンソールで一度
# logcat
と打つとこのコマンドを終了できないので、コンソールがふさがってしまいます。
USBかネットワーク経由で adb shell で開いたshellでは^Cが効きます。でも手軽にシリアルコンソールで^Cが効くようにする方法がないかなとtwitterでつぶやいたら多くの人が教えてくれたので、それをここで紹介します。
教えてもらった方法は2つあります。どちらもうまくいくことをKZM-A9-Dualボードで確認しました。
- カーネルのブートパラメータでandroidboot.consoleを指定する
- init.c を修正して /dev/consoleにTIOCSCTTYをセットする
カーネルのブートパラメータでandroidboot.consoleを指定する
U-bootからLinuxカーネルを起動するときにカーネルにブートパラメータを指定しますが、通常はこの中でconsole=の指定があるはずです。例えば
console=ttyS1,115200n8n
この場合なら以下のようにandroidboot.consoleを指定します。
console=ttyS1,115200n8n androidboot.console=ttyS1
init.c を修正して /dev/consoleにTIOCSCTTYをセットする
こちらの方はAndroidのソースを修正して再ビルドする必要がありますが、変更するのは一箇所でとても簡単な修正です。
変更箇所はこちら
再ビルドした後にinitだけ置き換えればOKです。
さらに^Hとか^Pは?
^Cが効くようになると欲がでて^H(バックスペース)や^P, ^Nのヒストリ機能が使いたくなりますが、これはコマンドラインを編集する機能を持つshellを使えば可能になります。
以前紹介したbashやbusyboxのashでできるそうです。