Raspberry Pi Compute ModuleにRaspbianをインストールする

勤め先でRaspberry PiのCompute Moduleを使用するお仕事の話があったのですが、 なくなりそうな雰囲気なので、お蔵入りになりそうなCompute Moduleをいただきました。

Comppute Moduleを組み込む基盤をいつか設計することを夢見ながら、 開発キットを使用してRaspbianをインストールしてみました。

f:id:jakalada:20151224232539j:plain

概要

公式の手順を参考に、 Raspberry Piをホストコンピュータとして使用してインストールしました。

ホストコンピュータがなんであれ、下記の手順を踏むことになります。

  1. Compute Module組み込みのストレージ(eMMC)をホストコンピュータのディスクとしてマウントする。
  2. マウントしたディスクに対してOSイメージを書き込む。

eMMCのマウントさえできれば、あとは通常のRaspberry Piで使用するSDカードにイメージを書き込む場合と同じ流れです。

調べ始めた当初は公式の手順が見つからず不安だったのですが、Moo SoftさんがWindowsで試した記事を書かれていたので助かりました。

ホストコンピュータの用意

下記の環境をホストコンピュータとして使用しました。

  • ハードウェア: Raspberry Pi 2
  • OS: Raspbian Jessie Lite (2015-11-21)

OSイメージの用意

ホストコンピュータにOSイメージを用意しておきます。 Compute Moduleのストレージは4GBしか容量がないため、小さいものを用意します。

この記事ではRaspbian Jessie Lite(2015-11-21)が下記のディレクトリ、ファイル名で保存されている前提で手順を記載しています。

  • /home/pi/2015-11-21-raspbian-jessie-lite.img

usbbootのビルド

Compute Moduleのストレージをホストコンピュータにマウントするために公式ツールのusbbootを使用します。

usbbootのソースコードをダウンロードするためにgitをインストールします。

$ sudo apt-get install git

usbbootはlibusbのバージョン1.0.0に依存しているため、開発用パッケージをインストールします。 libusbというパッケージも存在しますが、最新版の別名になっていて、1.0系ではなく2.0系がインストールされてしまうので注意してください。

$ sudo apt-get install libusb-1.0-0-dev

Githubからusbbootのソースコードをダウンロードします。

$ git clone --depth=1 https://github.com/raspberrypi/tools

ビルドします。

$ cd tools/usbboot
$ make

カレントディレクトリにrpibootという実行ファイルが生成されていることを確認してください。

$ ls rpiboot
rpiboot

eMMCのマウント

rpibootコマンドを実行することで、Compute Moduleの接続時にホスト・コンピュータ側に デバイスファイルが作成されるのですが、先に同名のデバイスファイルが存在しないことを確認しておきます。 確認の方法は環境によって異なるので注意してください。この記事ではsdaで始まるデバイスファイルが最初は存在しない前提で手順を記載しています。

$ ls /dev/sda*
ls: cannot access /dev/sda*: No such file or directory

rpibootコマンドを実行します。

$ sudo ./rpiboot -v
Waiting for BCM2835 ...

Waiting for BCM2835 ...という出力が行われていれば、Compute Moduleの接続待ちに入っています。

Compute Moduleを起動して、ホストコンピュータに接続することになりますが、USB SLAVE BOOTで起動させるため、写真のようにJ4(中央のピン)とEnable(基盤にENと記載されている側のピン)が接続されるようにジャンパピンをセットします。

f:id:jakalada:20151227014828j:plain

基盤に"POWER IN"と記載されているほうのマイクロUSBポートに電源アダプタを接続してCompute Moduleを起動してから、基盤に"USB SLAVE"と記載されているほうのマイクロUSBポートを使用してホストコンピュータと接続します。

すると、下記のような出力が行われ、rpibootの処理が終了します。

Found serial = 0: writing file ./usbbootcode.bin
libusb_bulk_transfer returned 0
Writing 16674 bytes
libusb_bulk_transfer returned 0
Successful
Waiting for BCM2835 ...
Found serial = 1: writing file ./msd.elf
libusb_bulk_transfer returned 0
Writing 376620 bytes
libusb_bulk_transfer returned 0
Successful

デバイスファイルが作られていることを確認します。

$ ls /dev/sda*
/dev/sda

これで、ホストコンピュータのディスクとしてCompute Moduleのストレージがマウントされています。 ホストコンピュータの環境によって、デバイスファイル名が異なるため注意してください。

OSイメージの書き込み

マウントしたストレージにOSイメージを書き込みます。 OSイメージのファイルパスやマウントされているデバイスファイル名は環境によって異なるので注意してください。

$ sudo dd if=/home/pi/2015-11-21-raspbian-jessie-lite.img of=/dev/sda bs=4MiB

OSイメージの書き込みにより増えているパーティションのデバイスファイルを確認します。

$ ls /dev/sda*
/dev/sda    /dev/sda1   /dev/sda2

下記のようなおなじみのパーティションになっています。

  • /dev/sda: Device
  • /dev/sda1: First partition (FAT)
  • /dev/sda2: Second partition (Linux filesystem)

起動

Compute Moduleの電源を抜き、ホストコンピュータと接続しているUSBケーブルを外します。OSイメージの書き込みが完了したので、ホストコンピュータは不要です。

ストレージに書き込んだOSで起動させるために、写真のようにJ4(中央のピン)とDisable(基盤にDISと記載されている側のピン)が接続されるようにジャンパピンをセットします。

f:id:jakalada:20151227014805j:plain

あとはディスプレイとキーボードを接続してから電源を入れると、下記の写真のように起動して、通常のRaspbianと同じように使用できます。

f:id:jakalada:20151227002633j:plain

ストレージの使用量が気になったので確認したところ下記のような状況でした。 2GBの空きがあるので、グラフィカルなものでなければ大抵のことはできそうです。

$ df
FileSystem     1K-blocks   Used Available Use% Mounted On
/dev/root        3662844 953368   2532752  28% /
devtmpfs          218244      0    218244   0% /dev
tmpfs             222516      0    222516   0% /dev/shm
tmpfs             222516   4448    218068   2% /run
tmpfs               5120      4      5116   1% /run/lock
tmpfs             222516      0    222516   0% /sys/fs/cgroup
/dev/mmcblk0p1     61384  20296     41088  34% /boot

最後に

ひとまず、Compute ModuleにOSイメージを書き込むことができました。ただ、Raspberry Pi Zeroのほうが小さいし、安いし、などと思ってしまい、あまり魅力を感じられていません。やはり、基盤の設計から考えられるようになったときに、選択肢として上がってくるような気がします。