Howto

シリアルインターフェース1の解放

出荷時のArmadilloは、シリアルインターフェース1をシリアルコンソールとして使用するように設定されています。 Armadilloのシリアルポート名については電源を入れる前にをご覧下さい。

シリアルポートは主に以下の3つに使用されています。

  • ブートローダ
  • カーネル
  • ユーザランドプログラム

ここでは、シリアルコンソールをシリアルインターフェース2に移動する方法とシリアルコンソールを使用しない方法の2つを紹介します。

1. シリアルインターフェース1をシリアルコンソールとして使用する

まず最初に、シリアルコンソールをシリアルインターフェース1からシリアルインターフェース2に移動してみます。

1.1ブートローダ

Armadilloのブートローダであるhermitのうち、loader-armadillo9-ttyAM1.binを使用します。loader-armadillo9-ttyAM1.binの説明はいろいろなHermitをご覧ください。

HermitをFlashに書き込みます。Hermitの詳しい使い方はオンボードFlashメモリに書き込むをご覧ください。


[PC ~]$ hermit download \
-i /usr/lib/hermit/loader-armadillo9-ttyAM1-v1.1.6.bin \
-r bootloader --force-locked
serial: completed 0x00005e53 (24147) bytes.         
$ 

これで、ブートローダの設定は終了です。

1.2 カーネル

カーネルにもシリアルインターフェース2にログを出すように指示する必要があります。カーネルへの指示は、Hermitに行なってもらいます。設定はhermitプロンプトでsetenvコマンドを使って行ないます。JP2をショートして電源を入れるとhermitプロンプトが表示されます。


hermit> setenv console=ttyAM1,115200

シリアルインターフェース2はLinuxの世界では「ttyAM1」として指定します。ボーレートをシリアルインターフェース1と同じ115200bpsにするために、「,」で区切って指定します。詳しくはArmadillo-9 Software Manualを参照してください。

1.3 ユーザランドプログラム

カーネルは自己初期化終了後、/sbin/initを起動します。/sbin/initは /etc/inittabに記述されている動作を行ないます。デフォルトの場合は以下のように記述されています。


::sysinit:/etc/rc.d/rc.sysinit

::respawn:/sbin/getty -L 115200 ttyAM0 vt102
::respawn:/sbin/getty 38400 tty1

::shutdown:/etc/rc.d/rc.reboot
::ctrlaltdel:/sbin/reboot

ここで重要なのは、2行目の respawn行です。

respawn行で指定されているように、gettyは ttyAM0つまりシリアルインターフェース1を使用するようになっていますので、これを ttyAM1(シリアルインターフェース2)を使用するように変更します。gettyについて詳しくは manをご欄ください。ユーザランドのカスタマイズ方法はユーザーランドをカスタマイズするをご欄ください。


::sysinit:/etc/rc.d/rc.sysinit

::respawn:/sbin/getty -L 115200 ttyAM1 vt102
::respawn:/sbin/getty 38400 tty1

::shutdown:/etc/rc.d/rc.reboot
::ctrlaltdel:/sbin/reboot

変更したユーザランドをフラッシュに書き込みます。


[PC ~]$ hermit download -i romfs.img.gz -r usreland
serial: completed 0x0025f6d1 (2488017) bytes.
[PC ~]$ 

ユーザランドをフラッシュに書き込み終ったら、Armadillo-9をリーブトしてください。だたし、ブートログはシリアルインターフェース2に表示されるので、Armadillo側のシリアルケーブルをCON2に接続してください。


Doing console=ttyAM1,115200

ブートログから、カーネルオプションのconsoleにttyAM1が渡されていることが確認できます。

2. シリアルコンソールを使用しない

つぎに、シリアルコンソールを使わない方法です。Armadillo-9はVGA出力を持っているので、コンソールをVGAに移すことができます。ただし、ブートローダだけはVGAに対応していないので、出力を止める必要があります。これで、両方のシリアルポートをデータ通信に使用することができます。

2.1 カーネル

今回はカーネルの設定から行ないます。というのも、シリアルコンソールを一切使用しないブートローダにしてしまうとカーネルパラメータの設定もできなくなってしまうからです。


hermit> setenv video

VGAをコンソールとして使用するには、USBのキーボードが必要になります。詳しくはArmadillo-9 Software Manualを参照してください。

2.2 ブートローダ

今回はloader-armadillo9-notty.binを使用します。1.1と同じくHermitをFlashに書き込みます。


[PC ~]$  hermit download \
-i /usr/lib/hermit/loader-armadillo9-notty-v1.1.6.bin \
-r bootlader --force-locked
serial: completed 0x00005deb (24043) bytes.          
[PC ~]$ 

2.3 ユーザランドプログラム

デフォルトの状態でVGA側にログインプロンプトが出る設定になっているので、シリアルポートを止めるだけでVGAのコンソールからログインすることができます。


::sysinit:/etc/rc.d/rc.sysinit

#::respawn:/sbin/getty -L 115200 ttyAM0 vt102
::respawn:/sbin/getty 38400 tty1

::shutdown:/etc/rc.d/rc.reboot
::ctrlaltdel:/sbin/reboot

変更したユーザランドをフラッシュに書き込みブートしてください。


[PC ~]$ hermit download -i romfs.img.gz -r userland
serial: completed 0x0025f6d1 (2488017) bytes.
[PC ~]$ 

ユーザランドをフラッシュに書き込み終ったら、Armadillo-9をリーブトしてください。VGAモニタにログインプロンプトが表示され、USBキーボードを使ってログインできることを確認してください。

3. 元の状態に戻すには

loader-armadillo9-notty.binを書き込ん場合、hermitはシリアルポートから要求を受け付けません。このため、次にhermitを使ってカーネル等を書き込む場合、shoehornをboot romモードで使用しなければなりません。

Armadillo上のJP2を短絡させ、シリアルケーブルをCON1に接続し以下のようにします。


[PC ~]$ shoehorn --boot --terminal \
--loader /usr/lib/shoehorn/shoehorn-armadillo9.bin \
--kernel /usr/lib/hermit/loader-armadillo9-boot-eth-v1.1.6.bin \
--initrd /dev/null

詳しくはソフトウエアマニュアルの「オンチップROM起動によるオンボードFlashへの書き込み」をご覧ください。