BeagleBoneBlack(ArchLinux)の起動

目的

今回はBeagleBoneBlackについてです。
前回作成したArchLinuxのSDカードを使ってBeagleBoneBlackを起動していきます。
起動したあと、便利に使うための説明などをしていきたいと思います。

方法

では、ここからはBeagleBoneBlackの起動を行っていきます。

BeagleBoneBlackはディスプレイにマイクロHDMIケーブルを使うのですが、高いので今回は使用せずに、ディスプレイなしでBeagleBoneBlackのセットアップを行います。 方法は、同じネットワークへ接続してsshで繋ぐ方法と、USB-Serialコンバータを使用してシリアルコンソールでログインする方法、クロスケーブルを使う方法があります。 今回は1つ目の、ネットワークごしにログインします。この方法ではIPアドレスがわからなくても、sshで接続することができます。

2015/7/30 追記
USB-Serialコンバータを使用してシリアルコンソールでログインする方法を追記しました。こちら

準備

まずは下記のものを用意してください

  1. BeagleBoneBlack (Rev C)
  2. ArchLinuxがインストールされたマイクロSDカード
  3. LANケーブル
  4. MiniUSB-B to USB-A ケーブル
  5. ネットワークに接続したLinuxマシン

(1) BeagleBoneBlack には種類が複数ありますが、現在最新のRev Cを使用します。

(2) BeagleBoneBlackはRaspberryPi B+などと同様にマイクロSDカードを使用します。 こちらの通りインストールをしておいてください。
内部ストレージもありますが、インストールにはSDカードを使用しないとできません。 内部ストレージの方が早いので、SDで起動した後に内部ストレージへインストールをお勧めします。

(3) BeagleBoneBlackをネットワークに接続するためにLANケーブルを使用します。有線でないと設定できません。

(4) BeagleBoneBlackはMiniBで電源供給を行います。 RaspberryPiと異なり、設定をするとこのポートを使って(ネットワークケーブルを使用せずに)パソコンからログインできるようになります。

BeagleBoneBlackの起動

まず、こちらで作成したSDカードをBeagleBoneBlackに差し込んでください。

ネットワークへ接続するために、有線LANでルータとBeagleBoneBlackを接続してください。

MiniUSBケーブルでBeagleBoneBlackとパソコンをつなぐと、電源が供給されて、BeagleBoneBlackが起動します。 しかし、デフォルトではeMMC(内蔵メモリ)に入っているDebianが起動してしまうので、SDカードから起動させるために、SDカードを差し込んだ口側にあるボタンを押しながら、USBケーブルを接続してください。

青いLEDが何度か点滅したら、ボタンから手を話しても大丈夫です。
しばらく待つと、LEDの点滅が一定周期になって起動したことがわかります。

起動には20~30秒ほどかかります。
これで起動は完了です。

BeagleBoneBlackへ接続

次に、用意しておいたLinuxマシンからBeagleBoneBlackへ接続します。 ここからは、Linuxマシンでの作業です。

LinuxマシンとBeagleBoneBlackは同じネットワークへ接続しておいてください。

BeagleBoneBlackへはsshを使って接続します。sshは、
$ ssh username@ipaddress
のように指定して接続します。

今回インストールしたArchLinuxのusernameはrootに設定されています。

では、ipaddressはどのようにしたらわかるのでしょうか?
インストールしたArchLinuxはIPアドレスはDHCPサーバから動的に取得するように設定されているため、IPアドレスがわかりません。

IPアドレスを探す

このような場合にはnmapを使用してIPアドレスを調べます。

nmapはポートスキャンなどに使われるネットワークツールです。 今回は、ネットワーク上に存在するすべてのマシンへパケットを送信して、SSH接続を待ち受けている(22番ポートが開いている)マシンを探します。
場合によっては、ネットワーク上に存在する他の人に迷惑をかけてしまうので、閉じた環境で実施してください。

まずは、BeagleBoneBlackを探す範囲を決定します。

LinuxマシンのIPアドレスをifconfigで取得します。 同じネットワークに接続しているため、BeagleBoneBlackのアドレスの範囲を推測することができます。

                            $ ifconfig
                            wlp2s0: flags=4163 UP,BROADCAST,RUNNING,MULTICAST   mtu 1500
                                    inet 192.168.1.5  netmask 255.255.255.0  broadcast 192.168.1.255
                                    inet6 2408:f3:447d:0:3fa5:eb78:c809:d96  prefixlen 64  scopeid 0x0 global
                                    inet6 fe80::f2ab:fd9f:60ae:e021  prefixlen 64  scopeid 0x20 link
                                    ether 40:25:c2:f5:53:2c  txqueuelen 1000  (Ethernet)
                                    RX packets 7864  bytes 3785892 (3.6 MiB)
                                    RX errors 0  dropped 0  overruns 0  frame 0
                                    TX packets 4651  bytes 794902 (776.2 KiB)
                                    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
                        

私の環境では、上記のように表示されました。inetのうしろにある192.18.1.5がIPアドレスです。

環境によって、IPアドレスや、デバイス名(wlp2s0 や enp4s0 eth0)は変わりますが、IPアドレスを見つけてください。

BeagleBoneBlackも同じネットワーク上にいるため、さきほど取得したIP:192.168.1.5より、BeagleBoneBlackのIPアドレスは192.168.1.1 〜 192.168.1.255であることがわかります。

ここまで推測できたのでnmapを使って、推測した範囲内のマシン全てにパケットを送ります。
192.168.1.1 〜 192.168.1.255の範囲を指定するためには、192.168.1.1-255と打ち込みます。

IPアドレスは適宜置き換えてください。

                            $ nmap -p22 192.168.1.1-255
                        

しかし、たくさんのマシンが表示されて22番ポートが開いているマシンがわかりづらいので、grepに流し込んでopenのものだけ表示させます。

                            $ nmap -p22 192.168.1.1-255 | grep -i -B3 open
                            Nmap scan report for 192.168.1.6
                            Host is up (0.011s latency).
                            PORT    STATE SERVICE
                            22/tcp open ssh
                        

私の環境では、上記のように表示されました。 forの後ろにあるのが、22番ポートが開いているマシンのIPアドレスです。

これで、BeagleBoneBlack(だと思われるマシン)のIPアドレスがわかりました。 もし複数表示された場合は、それぞれのマシンにssh接続を試してみてください。 正しいマシンにのみログインできるはずです。 (BeagleBoneBlackが複数ある場合は別ですが)

SSHで接続する

BeagleBoneBlackのIPアドレスがわかったため、これでやっと接続できます。

$ ssh username@ipaddress
のusrenameをroot、ipaddressを先ほど発見したIPアドレスに置き換えて接続します。

                            $ ssh root@192.168.1.6
                        

「The authenticity of host '192.168.1.* (192.168.1.*)' can't be established.
ECDSA key fingerprint is ********************::.
Are you sure you want to continue connecting (yes/no)?」
と聞かれたら、yesと入力してください。
要は「これまでに接続したことがないけど信頼できるシステムなの?」ということです。

                            Are you sure you want to continue connecting (yes/no)?  yes
                        

もし、「Warning: Permanently added '192.168.1.*' (ECDSA) to the list of known hosts. ssh_packet_read: Connection closed」と言われて接続できない場合は、以前に同じIPアドレスのホストに接続したことがあるようです。 ホストが変わったため、次のように入力してそのIPアドレスのsshのリストを初期化してみてください。

ipaddressは適宜置き換えてください。

                            $ ssh-keygen -R ipaddress
                        

うまく接続できると、「root@192.168.1.6's password:」とパスワードの入力を求められます。 デフォルトでrootのパスワードは「root」になっているため、rootと入力してください。

                            root@192.168.1.6's password: root
                        

コンソールの左端が、「[root@alarm ~]#」になったら接続成功です。

                            [root@alarm ~]#
                        

BeagleBoneBlackへ接続する(シリアルコンソール)

sshではなく、シリアルコンソールで接続する方法についてです。この方法では、sshが起動していない場合、ネットワークがない場合でも接続できます。

まずは、仮想コンソールscreenをインストールします。

                            $ sudo pacman -Sy screen
                        

次にUSB-SerialコンバータとBeagleBoneBlackを接続します。

次のように接続してください。

BeagleBoneBlackUSB-Serialコンバータ
LANポート側から1つ目 GND
LANポート側から4つ目 TX (OUTPUT)
LANポート側から5つ目 RX (INPUT)

LinuxマシンにUSB-Serialコンバータを接続して起動します。

lsを使ってUSB-Serialコンバータのデバイス名をチェックします。

                            $ ls /dev/ttyUSB* /dev/ttyACM*
                        

私の環境では、/dev/ttyUSB0として認識されました。

下記のコマンドを打って接続します。デバイス名は各自置き換えてください。

                            $ sudo screen /dev/ttyUSB0 115200
                        

これで接続できます。

終了するときはctrl+a k yと3つ順に入力してください。

BeagleBoneBlack(ArchLinux)の設定へ続く

おわりに

長くなってしまったため、分割して次回に続きます。
わからないことなどがありましたら、ご質問だくさい。

2015/6/30