Raspberry Pi Compute ModuleにRaspbianをインストールする
勤め先でRaspberry PiのCompute Moduleを使用するお仕事の話があったのですが、 なくなりそうな雰囲気なので、お蔵入りになりそうなCompute Moduleをいただきました。
Comppute Moduleを組み込む基盤をいつか設計することを夢見ながら、 開発キットを使用してRaspbianをインストールしてみました。
概要
公式の手順を参考に、 Raspberry Piをホストコンピュータとして使用してインストールしました。
ホストコンピュータがなんであれ、下記の手順を踏むことになります。
- Compute Module組み込みのストレージ(eMMC)をホストコンピュータのディスクとしてマウントする。
- マウントしたディスクに対して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と記載されている側のピン)が接続されるようにジャンパピンをセットします。
基盤に"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と記載されている側のピン)が接続されるようにジャンパピンをセットします。
あとはディスプレイとキーボードを接続してから電源を入れると、下記の写真のように起動して、通常のRaspbianと同じように使用できます。
ストレージの使用量が気になったので確認したところ下記のような状況でした。 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のほうが小さいし、安いし、などと思ってしまい、あまり魅力を感じられていません。やはり、基盤の設計から考えられるようになったときに、選択肢として上がってくるような気がします。