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でできるそうです。



トラックバックURL

コメントする

名前
 
  絵文字
 
 
記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード