2015年12月4日金曜日

玄人志向 玄箱(Debian Jessie)のシリアルコンソールの問題

玄箱を Debian Jessie 化してからシリアルコンソールへアクセスできなくなっていました。何となく手持ちの Debian Jessie にアップグレードしたマシンで、かつてシリアルコンソールを設定していたマシンの動作状況を確認してみました。するとこのマシンもシリアルコンソールへアクセスできなくなってしました。原因は、従来の sysV から systemd へ移行したことが原因でした。まずは通常の Debian Jessie のパソコンでシリアルコンソールの設定を学習しました。

通常のパソコンのシリアルコンソールの設定

カーネルの起動パラメータを設定するのは Grub2 の役目です。カーネルの起動パラメータにシリアルコンソールの設定を追加しました。一緒に Grub2 もシリアルコンソールへ出力させる設定をしました。
# vi /etc/default/grub

(カーネルの起動パラメータの設定)
GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200"

(Grub の設定)
GRUB_TERMINAL=serial
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"

Grub2 の設定を反映させます。
# update-grub

従来は /etc/inittab で設定していたシリアルコンソールを systemd に対応した方法へ変更しました。
# ln -s /lib/systemd/system/serial-getty@.service /etc/systemd/system/getty.target.wants/serial-getty@ttyS0.service
# systemctl daemon-reload
# systemctl start  serial-getty@ttyS0.service
# systemctl enable serial-getty@ttyS0.service

以上で設定終了です。別のパソコンからシリアルケーブルを接続して動作確認をしました。接続速度は Grub2 のところで設定した 115200bps です。

玄箱(Debian Jessie)のシリアルコンソールの設定 

パソコンでのシリアルコンソールの設定を元に行いました。シリアル・ポートは、/dev/ttyS1 となります。そして玄箱では Grub2 を使用しておらず、u-boot での設定がそのままカーネルの起動パラメータとなります。以前に設定した内容で問題ありませんでした。なおシリアルコンソールの接続速は u-boot で設定した 57600bps です。

設定は systemd に対応した部分だけです。
# ln -s /lib/systemd/system/serial-getty@.service /etc/systemd/system/getty.target.wants/serial-getty@ttyS1.service
# systemctl daemon-reload
# systemctl start  serial-getty@ttyS1.service
# systemctl enable serial-getty@ttyS1.service

上記の設定ですぐにシリアルコンソールへ出力が表示されました。
Debian GNU/Linux 8 kurobox ttyS1

kurobox login:

問題発生

上記の通り上手くシリアルコンソールが出力されて気分よく玄箱を再起動させたところ、シリアルコンソールが途中で途切れてしまいました。いわゆるブートコンソールの部分までです。再度 systemctl コマンドで起動させてみたところシリアルコンソールが起動しました。
# systemctl daemon-reload
# systemctl start  serial-getty@ttyS1.service

どうも起動過程で /dev/ttyS1 がエラーとなっていることが問題のようです。
[ TIME ] Timed out waiting for device dev-ttyS1.device.
[DEPEND] Dependency failed for Serial Getty on ttyS1.

ネット上を検索してみたところ、systemd のバージョンによってはカーネルのビルド・オプション(CONFIG_FHANDLE=y)の設定が必要なのだそうです。このオプションを設定してカーネルの再ビルドを行えばシリアルコンソールが自動起動してくれる可能性があります。ただちに玄箱用のカーネルをビルドする知識がありませんので、しばらくこのシリアルコンソールの件は保留にしておきたいと思います。なお /etc/init.d/ の中にシリアルコンソールを起動させるスクリプトを設置する手段もありますが、正攻法のカーネルの再ビルドをしたいと思っています。
[SOLVED] Problem with systemd - Linux OS - LeMaker
http://forum.lemaker.org/thread-3312-1-1.html


0 件のコメント:

コメントを投稿