ソフトウェアとハードウェアの境界

ホビー開発に関する誰得情報満載☆

MINIBIAN 最小構成のRASPBIAN (Raspberry Pi) ①

組込み開発っぽい事したい

みんな大好きRaspberry Pi(以下RPi)に、僕もまた夢中なのだ。
www.raspberrypi.org

概要はここで説明せずとも、検索すればたくさんの記事が見つかる、とてもメジャーな製品だ。
使い方は様々なのだが、僕は特に「組込みっぽく」使うことを心がけている。 ネットワークに接続せず、USBシリアル変換ケーブルの給電のみで作動させている。
過去記事はこちら

また、USBシリアル変換ケーブルの給電のみでは、時折バグる。 そのため、現在ではこちらのUSBハブを仲介して接続している。
www.amazon.co.jp
要は、セルフパワーのUSBハブを介することで、電源を補えばよかったのだ!!

ファームウェアの読み書き

組込み開発の醍醐味といえば、PCでクロスコンパイルしたバイナリイメージや実行ファイルをターゲットに書き込む作業だ。 少なくとも僕の中ではそうだ。
「ちゃんと動いてくれるかな??」
と胸踊らせながらターゲットに書き込む。
答えは電源を入れた時、あるいはボタンを押した時にわかる、というのが組込み開発でしょう。
アプリやウェブの開発でも、「動かす直前」が最もドキドキするはず。

そんなわけで僕は、ネットワーク越しに実行ファイルを渡したり、USBメモリさしてコピーするみたいな、普通のPC操作をするのは嫌だった。 組込み開発ぽい雰囲気を出すことが大事なのだ。
そこで、ちょっとMっぽい条件を自分に課せた。

  • 通信はUSBシリアル変換ケーブルしかできない。
  • ファイルのやりとりは、ノートパソコンに付いているSDカードリーダのみ使用できる。
  • OSはLinuxBeanのみ使用する。

これだけあれば十分だ。
さぁ、旅に出よう(自分自身いろいろ不可解)。

ターゲット用OSはMINIBIAN

以前にも説明したこちらのターゲットOS、というかイメージ。
minibianpi.wordpress.com
最新のものはRPi2にも対応しているはずなので、少しファイルサイズが大きい。
こちら2014-11-24-wheezy-minibian.tar.gzが一番ファイルサイズが小さいと思うので、RPi(2じゃない)を使用する場合は、お好みで選ぼう。

SDカードは2GBでも十分。 今後拡張していくにしても、ApacheSambaやGitやMySQLを入れてサーバ化するとかしなければ十分な容量だ。 僕は特にIOの制御、IPC関連のシステムコールを使用したシステムを作ってみたいと思っていて、それほど容量は必要ないと考えている。
ネットワークのsocketやlisten、bind、IPCは共有メモリやSemaphore、低レベルのIO制御のioctlとか使ってみたい。

何をするかによるけれども、とりあえずそういうシステムコールを使用するプログラムを作成する、というのが私の勉強スタイルだ。 目的のための勉強ではない、勉強そのものが目的なのだ!!(聞き飽きたフレーズ感がすごい)

LinuxでのSDカードへの書き込み

開発環境にはLinuxBeanを選定しているので、Linuxではお馴染みのddコマンドを利用しよう。
(ちなみに、僕はzsherなので、プロンプトは'%'です。)

SDカードにMINIBIANイメージの書き込み
% ls -1                                               {~/Work/RPi/img}
.
..
2015-11-12-jessie-minibian.img
% sudo dd if=2015-11-12-jessie-minibian.img of=/dev/sdg

僕の環境の場合、SDカードは/dev/sdgとして認識されていた。 SDカードがどのデバイスかは、抜き差ししてls /devして調べられたし。 なんか接続した時のログみて判断するのがいいみたいだけど、メンドイからやめた。

上記のコマンドが終了し、プロンプトが戻ってくれば書き込み完了。 実機に差し込み電源を投入(USBシリアルを接続)すれば、起動成功だ。

Linuxのシリアルコンソール

LiunxBeanはUbuntuベースのディストリビューションなので、Ubuntuのソフトが使える。
使いやすかったソフトはgtkterm。 こちらの設定をしてみよう。

gtktermのインストール
#gtktermのインストール
% sudo apt-get install gtkterm

インストール直後はgtktermは使えない。 使いたいデバイス(ttyUSB*)へのアクセス権がないからだ。 次のコマンドで自ユーザをdialoutグループに追加する。

dialoutグループにユーザを追加
#デバイスがあるかどうか確認
% ls -l /dev/tty*
#ttyUSB0がUSBシリアルデバイス
#所有グループがdialoutになっている
crw-rw---- 1 root dialout 188,  0 Jan 20 23:10 /dev/ttyUSB0
...
% sudo addgroup [ユーザ名] dialout
#rootも追加しておいていいかもしれない
% sudo addgroup root dialout

これでUSBシリアルケーブルを使用したRPiとの通信が正常にできる。 念の為に一度PCを再起動しておこう。

gtktermの使い方

LinuxBeanを使用しているならば、メニュー→アクセサリ→Serial port terminalから起動できる。 もちろんshellからgtktermとコマンドしても良い。

gtktermイメージ


通信時の設定は以下となっている。

gtkterm通信設定
設定項目
ポート /dev/ttyUSB0
ボーレート 115200
パリティ なし

その他もろもろはデフォルトでおk。

gtkterm設定画面

f:id:tokixy56:20160121001009p:plain
上記の設定が完了すれば、gtktermイメージにあるように感動の起動ログを眺めることができる。

次回予告 Raspberry Piのイメージで遊ぶ

大体こういうことをする。

  • raspi-configなしでディスクを拡張
    MINIBIANにはraspi-configがないので、知っておくと便利。
  • RPiのイメージを1GBキッチリにしたい。
    いくつか方法があるが、SDカードにGPartedでパーティションを作りたい。
    FAT32を64MB、ext4を960の合計キッチリ1GBの領域を確保する。 そこに必要なファイルをコピーし、イメージの作成、読み出しなどをする。
  • イメージファイルをPC上にマウントして中身を書き換えたい。
    イメージファイルはPC上にマウントすることができる。なんか面白いのでやってみたい。