本章では、標準状態のArmadilloに電源を投入してから、ログイン画面が表示されるまでの起動シーケンスを詳しく説明します。ブートローダー、カーネルイメージ、ユーザーランドのルートファイルシステムイメージは、フラッシュメモリのそれぞれ対応するリージョンに書き込まれているものとします。
Armadilloシリーズは、汎用CPUボードという性格上、ユーザーが書き換え可能なフラッシュメモリを搭載しています。ユーザーが操作を誤ってフラッシュメモリを消去してしまっても復旧が可能なように、Armadilloはジャンパによって、電源投入後の動作(ブートモード)を変更することができます。
Armadillo-400シリーズでは、JP1の設定によってUARTブートモードと、オンボードフラッシュメモリブートモードを選択することができます。JP1をショート[]にすると、UARTブートモードとなります。JP1をオープン[]にしておくと、オンボードフラッシュメモリブートとなります。オンボードフラッシュメモリブートモードでは、フラッシュメモリのブートローダーリージョンに配置されたブートローダー(Hermit-At)が起動されます。
Hermit-Atは起動されると、まず、DRAMの初期化、拡張インターフェースのIOポートを入力にするなどの必要最小限の設定をおこないます。その後の動作は、JP2の設定によって決定されます。JP2をショートにしておくと保守モード、オープンにしておくとオートブートモードとなります。
ジャンパの設定による、ブートモードの違いを表5.1「ジャンパ設定」にまとめます。
表5.1 ジャンパ設定
JP1 | JP2 | ブートモード |
---|
オープン | オープン | オンボードフラッシュメモリブート/オートブートモード |
オープン | ショート | オンボードフラッシュメモリブート/保守モード |
ショート | オープン/ショート | UART ブート |
JP1をショートした状態で起動すると、UARTブートモードとなります。UARTブートモードは、フラッシュメモリのブートローダーが壊れた場合など、システム復旧のために使用します。詳しくは、「Armadillo-400シリーズ ソフトウェアマニュアル」の「ブートローダーを出荷状態に戻す」を参照してください。
JP1をオープン、JP2をショートにした状態で起動すると、Hermit-Atの保守モードとなります。保守モードの場合、Hermit-Atブートローダーはプロンプトを表示し、コマンド入力待ちとなります。保守モードでは、フラッシュメモリの更新、ブートデバイスやカーネルパラメータの設定などを行うことができます。詳しくは、「Armadillo-400シリーズ ソフトウェアマニュアル」の「付録AHermit-Atブートローダー」を参照してください。
参考として、図5.1「Hermit-At保守モード時の表示」に保守モード起動時のシリアルコンソールへの表示を示します。このような表示になった場合は、ジャンパピンの設定を確認してください。
JP1とJP2を共にオープンにした状態で起動すると、オートブートモードとなります。これが通常運用での設定です。
Hermit-Atは、最低限のハードウェアの初期化を行った後、自分自身をメモリ(RAM)にコピーします[]。
次にブートデバイス[]からカーネルイメージとユーザーランドのルートファイルシステムイメージを読み出し、メモリ上にコピーします。
その後、ブートローダーを抜け、カーネルの開始番地へ実行を移します。この一連の処理を、Linuxカーネルをブートすると表現します。
Hermit-AtがLinuxカーネルをブートするときの、コンソールへの出力を図5.5「Hermit-Atオートブートモード時の表示」に示します。
| Hermit-Atはシリアルの初期化が完了すると自身のバージョンを表示します。 |
| カーネルイメージが圧縮されている場合、展開しながらメモリ上にコピーします。 |
| 同様に、ユーザーランドイメージを展開しながらメモリ上にコピーします。ユーザーランドイメージのコピーが完了すると、カーネルに実行を移します。 |
| この行以降は、カーネルが表示しています。 |
ブートローダーから実行を移されると、ようやくLinuxカーネルが動作を開始します。
Armadilloのカーネル起動ログの例として、Armadillo-420の起動ログを図5.6「Armadillo-420カーネルブートログ」に示します。
| ブートローダーから実行が移ると、カーネルはまず自身のバージョン、CPUアーキテクチャ、マシン名、メモリの状態などを表示します。 |
| カーネルパラメータは、「console=ttymxc1,115200」が使用されています。 |
| ここから、ボード固有のデバイスの初期化が始まります。 |
| RAMディスクのblock0にext2ファイルシステムを検出しました。 |
| 検出したファイルシステムをルートファイルシステムとしてマウントします。 |
| ルートファイルシステムの所定のパスにinitプログラムが見つかると、カーネルはinitを実行します。この行から、initによって表示されています。 |
カーネルの初期化が完了すると、最初のプロセスとしてinitというアプリケーションプログラムが実行されます。initは、まず、コンソールの初期化をおこない、次に/etc/inittab
というファイルに書かれた設定に従って、コマンドを実行します。
この時、処理状況を表示するシステムコンソールには、カーネルパラメータのconsole
オプションで指定されたデバイスを使用します。もし、console
オプションが指定されていない場合は、/dev/console
を使おうとします。図5.6「Armadillo-420カーネルブートログ」で示したように、標準でconsole
オプションにttymxc1が指定されます。ttymxc1は、Armadillo-400シリーズのシリアルインターフェース1に対応する、シリアルデバイスです[]。そのため、initは、シリアルインターフェース1をシステムコンソールとして設定します。
次に、initは、/etc/inittab
ファイルの中身を読み込み、その内容に従って処理を行います。inittab
には、一行ごとにinitが実行すべきコマンドが記述してあります。inittab
の書式は、以下のようになっています。
idには起動されるプロセスが使用するコンソールを指定します。省略した場合は、システムコンソールが使用されます。
runlevelは、Atmark Distで生成されるユーザーランドに含まれるinitでは、無効です。
actionはどのような状態のときにprocessに指定したコマンドを実行すべきかをあらわします。actionに指定可能な値を表5.2「initのactionに指定可能な値」に示します。
表5.2 initのactionに指定可能な値
値 | いつ process を実行するか |
---|
sysinit | システム初期化時。 |
respawn | sysinit 終了後。このアクションで起動されたプロセスが終了すると、再度 process を実行する。 |
shutdown | システムをシャットダウンする前。 |
ctrlaltdel | Ctrl-Alt-Delete キーの組み合わせが入力されたとき。 |
例として、Armadillo-420のinittab
は以下のようになっています。
図5.8「Armadillo-420のinittab」からわかるように、システム初期化時には/etc/init.d/rc
が実行されます。
Armadilloでは、/etc/init.d/rc
はシェルスクリプトになっています。シェルスクリプトは、シェルで実行できるコマンドを記述したスクリプトです。詳細は、第2部の「シェルスクリプトプログラミング」で説明します。
Armadillo-420の/etc/init.d/rc
は以下の処理を実行します。
- procfsをマウントします。[]
- 一度ルートファイルシステムをリードオンリーでリマウントし、fsckにより、ルートファイルシステムをチェックします。問題があればリブートします。
- ルートファイルシステムをリード/ライト可能でリマウントします。
- sysfs、tmpfsをマウントします。[]
- ログ関連のファイルをクリアします。
/etc/issue
、/etc/issuet.net
ファイルの設定をします。[]/etc/rc.d/
ディレクトリにある、Sから始まるファイル(初期化スクリプト)を順番に実行します。- 赤色LEDが点滅していたら、点滅を停止し赤色LEDを消灯させます。
/etc/rc.d
ディレクトリ内には、Sからファイル名が始まる、初期化スクリプトがあります。これらの初期化スクリプトで、コンフィグ領域のリストアや、ファイヤーウォールの設定、ネットワークインターフェースの有効化、各サーバーの起動などをおこないます。初期化スクリプトはファイル名の順番に実行されます。そのため、Sに続く2桁の数字が小さいファイル名のスクリプトから順に実行されます。
また、処理の一番最後に/etc/config/rc.local
というファイル名で実行可能なファイルがあるか確認し、ファイルがあればそれを実行します。/etc/config/
ディレクトリは、flatfsdでコンフィグ領域に保存可能なディレクトリですので、開発時などに自動起動プログラムを試したいという場合に使用することができます。
sysinitアクションに指定された以上の処理が完了すると、initは次に、respawnアクションに指定されたコマンドを実行します。Armadillo-400シリーズの場合は、gettyというプログラムを起動します。
gettyは、/etc/issue
の内容を読み取り、コンソールに表示します。そして、ログインユーザー名の入力待ちになります。ログインユーザー名が入力されると、それを引数として、loginというプログラムを起動します。
loginは、ログイン名を指定されて起動されると、パスワードの入力待ちになります。パスワードが入力されると、/etc/passwd
及び/etc/shadow
の内容とログインユーザー名、パスワードを照合して、認証をおこないます。ユーザー名とパスワードが一致すると、/etc/passwd
で指定されたユーザー用のシェルを起動します。
シェルは、起動されるとプロンプトを表示して、コマンドの入力待ちになります。