ラベル シリアルコンソール の投稿を表示しています。 すべての投稿を表示
ラベル シリアルコンソール の投稿を表示しています。 すべての投稿を表示

2013年10月1日火曜日

Mac OS X Mountain Lion で RaspberryPi とシリアル接続する

前回の記事、FreeBSD on RaspberryPi でシリアルコンソールを使用するでは、FreeBSD box と FreeBSD on RaspberryPi とのシリアル接続でしたが、この記事では、Mac OS X Mountain Lion と FreeBSD on RaspberryPi とのシリアル接続を扱います。

RaspberryPi の設定などは全く同じですが、記事の読みやすさを考慮して、こちらにも手順を再掲します。

RaspberryPi でシリアル接続をするのに、今回使用しているのは、GPIO に直接差して使うタイプの、3線式 USB シリアル変換ケーブルです。ケーブルの色などはお持ちのものに適宜読み替えてください。


1: RaspberryPi にシリアルコンソールの設定をする

  1. /boot/loader.rc の先頭に以下の設定を追加します。
    \ use serial console
    set boot_multicons="YES"
    set boot_serial="YES"
    set comconsole_speed="115200"
    set console="comconsole,vidconsole"
    
  2. /etc/ttys に以下の設定を追加します。crochet でイメージを作ると恐らくこのエントリーは入っているはずなので、その場合は、デフォルトでは dialup になっている部分を vt100 に修正します。
    ttyu0   "/usr/libexec/getty 3wire.115200"       vt100   on secure
    

2: RaspberryPi にケーブルを差す

RaspberryPi の GPIO に間違えないように注意しながらケーブルを差します。

PaspberryPi は一旦シャットダウンして電源を切っておくことを強くお勧めします。

GPIO が RaspberryPi の右上にくるように見た場合、左側の列の一番上がピン番号 1、右側の列の一番上がピン番号 2 なので、右側の上から 3 番目が 6:GND, 4 番目が 8:TX, 5番目が 10:RX です。

OLIMEX のケーブルは、GNDは青、RX(INPUT)はグリーン、TX(OUTPUT)は赤、とリンク先に書いてありますので、青 (GND) を 3 番目、グリーン (RX) を 4 番目、赤 (TX) を 5 番目に差します。RX、TX をクロスにするのがポイントです。尚、上から 1,2 番目は 5V ですので、うっかり間違えないように注意しましょう。

3: Mac OS X に USB シリアル用デバイスドライバを追加する

Mac OS X 用の Prolific PL2303 のデバイスドライバは、Prolific のサイトからダウンロードすることができます。

PL2303 Mac OS X Driver Download http://www.prolific.com.tw/US/ShowProduct.aspx?p_id=229&pcid=41

今回は、md_PL2303_MacOSX-10.6up_v1.5.1.zip をクリックしてダウンロードします。

ダウンロードしたファイルはダブルクリックして解凍し、PL2303_MacOSX_v1.5.1.pkg をクリックしてインストールします。

この時点で USB ケーブルを差してみて、RaspberryPi に電源を投入し、双方でシリアル USB がきちんと認識されるかどうかと、作成されるデバイスファイル名を確認します。デバイスファイルは、/dev の下に、 Max OS X 側には cu.usbserial と tty.usbserial、RaspberryPi 側には cuau0 と ttyu0 ができているはずです。

また、以下のコマンドを RaspberryPi 側で実行することで、シリアル出力のプロセスが正しく動作しているかどうかを確認することができます。

% ps -axww | grep getty
1275 u0  Is+  0:00.03 /usr/libexec/getty 3wire.115200 ttyu0
1271 v0  Is+  0:00.03 /usr/libexec/getty Pc ttyv0
1272 v1  Is+  0:00.03 /usr/libexec/getty Pc ttyv1
1273 v2  Is+  0:00.03 /usr/libexec/getty Pc ttyv2
1274 v3  Is+  0:00.03 /usr/libexec/getty Pc ttyv3

4: Mac OS X に minicom をインストールする

Mac OS X ではデフォルトで screen が使えるので、別にこれでもいいや、という人は特にインストールする必要はありません。
screen でシリアル接続をするのであれば、

% screen /dev/tty.usbserial 115200

で RaspberryPi とシリアル接続することができます。

しかし、わたしは、screen でシリアル接続して RaspberryPi にビルドさせている時に、ビルド中にエラーが発生すると、なぜかその時画面に出力されていたビルドログだけが画面表示から消えてしまうが、シリアル接続は切れていない、という謎現象に悩まされたため、結局 Mac OS X でも minicom を入れることにしました・・。

まず、ソースコードをダウンロードします。

minicom http://alioth.debian.org/projects/minicom/

ページの中ほどにある「最新ファイルリリース」の download のアイコンをクリックすると、ファイルリストのページに飛びますので、Latest version と表示されているバージョンの tar.gz ファイルをクリックしてダウンロードします。今回は、minicom-2.6.2.tar.gz をダウンロードしました。

ダウンロードしたら、クリックして解凍します。Mac って便利ですよね。

解凍したら、以下を実行します。
尚、Mac OS X Mountain Lion では、以下のコマンドの実行には、Xcode 及び、Command Line Tools ( Xcode の Preferences からインストール) が必要となります。

% cd Downloads/minicom-2.6.2
% ./configure
% sudo make
% sudo make install

デフォルトでは、/usr/local/binにインストールされますので、/usr/local/bin へのパスは通しておきましょう。

5: minicom の設定をする

ここで minicom の設定をします‥。いきなり起動しようとすると、おそらくエラーになりますので注意です。

% sudo minicom -s
            +-----[configuration]------+
            | Filenames and paths       |
            | File transfer protocols     |
            | Serial port setup             |
            | Modem and dialing          |
            | Screen and keyboard      |
            | Save setup as dfl            |
            | Save setup as..               |
            | Exit                                 |
            | Exit from Minicom           |
            +------------------------------+

こんな画面が表示されて、カーソルキーでメニュー選択ができます。英語な分表示が崩れないので、まだ、いろんな意味でだいぶんましです。

その中の、「Serial port setup」を、それぞれ、以下の内容に修正する必要があります。頭のアルファベットを選ぶと該当の部分にカーソルが飛びますので、なんとか目的の内容になるように入力してください。
尚、シリアルデバイスのパスはご自分の環境にあわせてください。多分このままで大丈夫だとは思いますが。

A - Serial Device
/dev/tty.usbserial
E - Bps/Par/Bits
115200 8N1
F - Hardware Flow Control
No
G - Software Flow Control
Yes

全ての設定を終えたら、「Save setup as dfl」して終了します。もしくは、「Save setup as..」で任意の設定ファイルを指定して終了することもできますが、その場合は起動するときに設定ファイルを指定して起動する必要があります。

6: minicom を起動する

設定が全て完了したら、後はただ起動するだけです。

% minicom

自分で設定ファイルを指定した場合は

% minicom -o 設定ファイル名

特に問題なければ以下のようなメッセージが画面に表示されます。

Welcome to minicom 2.6.2

OPTIONS:                                                                     
Compiled on Oct  1 2013, 12:24:06.                                           
Port /dev/tty.usbserial, 14:39:02                                            
                                                                             
Press CTRL-A Z for help on special keys 

こんな感じに表示されたら、あとはシリアルコンソールを使うだけです。

RaspberryPi が起動済みであれば、このあとエンターキーを押したりすれば、ログインプロンプトが表示されるはずなので、無事にログインできれば ok です。

念のため RaspberryPi を再起動してみて、無事に起動メッセージが表示されるかどうか確認してみるといいでしょう。

2013年9月12日木曜日

FreeBSD on RaspberryPi でシリアルコンソールを使用する

RaspberryPi だと、通常の作業では ssh でログインして作業するので大体間に合ってはいるのですが、どうも最近無線が不安定なのか、何かをやっている最中によく ssh が落ちてしまっていろいろ面倒だったので、シリアルコンソールが使えるように設定してみました。やっぱり、これはこれで便利ですよね。いざというときにいちいちディスプレイつながなくてもいいし。

RaspberryPi でシリアル接続をするのに、多分一番お手軽に使えるのが、GPIO に直接差して使うタイプの、3線式 USB シリアル変換ケーブルです。

わたしは、ここで買いました。送料を含めても多分一番お安いのではないかと思います。

ただ、よく売ってる RaspberryiPi 用のケースって GPIO のところに穴が開いてないんですよね。

なので、とりあえず、こんな感じに穴を開けてみました。適当にやったわりにはそれっぽく見えるので、ま、いいか~。

それでは実際の設定方法です。ここで想定しているのは FreeBSD の入った RaspberryPi と FreeBSD box とのシリアル通信です。


1: RaspberryPi にシリアルコンソールの設定をする

  1. /boot/loader.rc の先頭に以下の設定を追加します。
    \ use serial console
    set boot_multicons="YES"
    set boot_serial="YES"
    set comconsole_speed="115200"
    set console="comconsole,vidconsole"
    
  2. /etc/ttys に以下の設定を追加します。crochet でイメージを作ると恐らくこのエントリーは入っているはずなので、その場合は、デフォルトでは dialup になっている部分を vt100 に修正します。
    ttyu0   "/usr/libexec/getty 3wire.115200"       vt100   on secure
    

2: RaspberryPi にケーブルを差す

RaspberryPi の GPIO に間違えないように注意しながらケーブルを差します。

PaspberryPi は一旦シャットダウンして電源を切っておくことを強くお勧めします。

GPIO が RaspberryPi の右上にくるように見た場合、左側の列の一番上がピン番号 1、右側の列の一番上がピン番号 2 なので、右側の上から 3 番目が 6:GND, 4 番目が 8:TX, 5番目が 10:RX です。

OLIMEX のケーブルは、GNDは青、RX(INPUT)はグリーン、TX(OUTPUT)は赤、とリンク先に書いてありますので、青を 3 番目、グリーンを 4 番目、赤を 5 番目に差します。尚、上から 1,2 番目は 5V ですので、うっかり間違えないように注意しましょう。

3: FreeBSD box に USB シリアル用デバイスドライバを追加する

今回使用している USB シリアル変換ケーブルは、Prolific PL2303 を使用している、とのことなので、以下の設定を /boot/loader.conf に追加します。

uplcom_load="YES"
ucom_load="YES"

ここで一旦再起動するか、再起動するのが面倒な場合は、以下のコマンドを実行して手動でカーネルモジュールを読み込みます。

# kldload uplcom
# kldload ucom

ちなみに、dmesg の出力は以下の通りです。

ugen2.3: <Prolific Technology Inc.> at usbus2
uplcom0: <Prolific Technology Inc. USB-Serial Controller, class 0/0, rev 1.10/3.00, addr 3> on usbus2

この時点で USB ケーブルを差してみて、RaspberryPi に電源を投入し、双方でシリアル USB がきちんと認識されるかどうかと、作成されるデバイスファイル名を確認します。デバイスファイルは、/dev の下に、FreeBSD box 側には cuaU0 と ttyU0、RaspberryPi 側には cuau0 と ttyu0 ができているはずです。

また、以下のコマンドを RaspberryPi 側で実行することで、シリアル出力のプロセスが正しく動作しているかどうかを確認することができます。

% ps -axww | grep getty
1275 u0  Is+  0:00.03 /usr/libexec/getty 3wire.115200 ttyu0
1271 v0  Is+  0:00.03 /usr/libexec/getty Pc ttyv0
1272 v1  Is+  0:00.03 /usr/libexec/getty Pc ttyv1
1273 v2  Is+  0:00.03 /usr/libexec/getty Pc ttyv2
1274 v3  Is+  0:00.03 /usr/libexec/getty Pc ttyv3

4: FreeBSD box に minicom をインストールする

シリアルコンソールを使うのに、一番無難‥ならしいので、ports から minicom をインストールします。

# cd /usr/ports/comms/minicom/
# make config-recursive
# make install clean

このままの状態で、minicom を起動してデバイスにアクセスしようとすると permission deny になるため、以下を実行します。

# chmod -s /usr/local/bin/minicom

5: minicom の設定をする

minicom の設定は面倒臭いです。なんか、古くてあまり思い出したくないようなユーザインターフェースを思いっきり見せつけられちゃいます‥。

でも、仕方ないので、基本設定を行います。

# minicom -s
            +-----[設定]------+
            | ファイル名とパス名     |
            | ファイル転送プロトコル   |
            | シリアルポート       |
            | モデムとダイヤル      |
            | 画面とキーボード      |
            | "dfl" に設定を保存  |
            | 新規に設定を保存      |
            | 終了            |
            | Minicom を終了   |
            +---------------+

こんな画面が表示されて、カーソルキーでメニュー選択ができます。冗談抜きで、こんな感じに表示されます。

その中の、シリアルポートの設定を、それぞれ、以下の内容に修正する必要があります。頭のアルファベットを選ぶと該当の部分にカーソルが飛びますので、なんとか目的の内容になるように入力してください。
尚、シリアルデバイスのパスはご自分の環境にあわせてください。多分このままで大丈夫だとは思いますが。

A - シリアルデバイス
/dev/ttyU0
E - 速度/パリティ/ビット
115200 8N1
F - ハードウェア流れ制御
いいえ
G - ソフトウェア流れ制御
はい

全ての設定を終えたら、「"dfl" に設定を保存」して終了します。もしくは、任意の設定ファイルを指定して終了することもできますが、その場合は起動するときに設定ファイルを指定して起動する必要があります。

6: minicom を起動する

設定が全て完了したら、後はただ起動すればおkです。

# minicom

自分で設定ファイルを指定した場合は

# minicom -o 設定ファイル名

特に問題なければ以下のようなメッセージが画面に表示されます。

minicom へようこそ 2.6.2

オプション: I18n 
コンパイルされた日時は:  Sep 10 2013, 23:10:21.
ポート /dev/ttyU0, 18:02:51

CTRL-A Z を押すと、説明画面になります。

こんな感じに表示されたらシリアルコンソールを使用する準備が無事完了したということです。

RaspberryPi が起動済みであれば、このあとエンターキーを押したりすれば、ログインプロンプトが表示されるはずなので、無事にログインできれば ok です。

念のため RaspberryPi を再起動してみて、無事に起動メッセージが表示されるかどうか確認してみるといいでしょう。

8: なんかうまくいかないときは・・

結構いくつかはめられどころがあったので、一応ここに書いておきます・・。

A: ちゃんとデバイスドライバを入れてるのに、USB シリアルがうまく認識されないで、変なエラーがでます

usbd_setup_device_desc: getting device descriptor at addr 2 failed, USB_ERR_STALLED
usbd_setup_device_desc: getting device descriptor at addr 2 failed, USB_ERR_STALLED
usbd_setup_device_desc: getting device descriptor at addr 2 failed, USB_ERR_STALLED
usbd_setup_device_desc: getting device descriptor at addr 2 failed, USB_ERR_STALLED
usbd_setup_device_desc: getting device descriptor at addr 2 failed, USB_ERR_STALLED
ugen1.3:  at usbus1 (disconnected)
uhub_reattach_port: could not allocate new device

複数 USB のポートがある時に、うまく認識されるポートと認識されないポートがありました。なので、とりあえず、USB のポートを全て試してみると解決するかもしれません。

B: 設定はうまくいってるはずなのに、minicom にログインプロンプトが表示されません

RaspberryPi の GPIO の接続を間違えてないか確認しましょう。特に赤と緑を逆に接続しがちです・・。

C: ログインプロンプトはでたのに、キー入力ができません

minicom の「F - ハードウェア流れ制御」と「G - ソフトウェア流れ制御」の値が正しく設定されているかどうか確認してみましょう。