Raspberry Pi のまとめ (2013/09/29)
前回のまとめから1年近く経って、いろいろ変わっているので改めて Raspberry Pi についてまとめてみました。 Google から Raspberry Piメモの各ページ に直接飛んでくる人が大勢いらしゃるので、他のページと重複している部分がありますが、ご容赦下さい。 Raspbian の新イメージ(2013-09-25-wheezy-raspbian) を使ってまとめてみました。 最後に LjES の近況をちょっと。
Raspberry Pi 専用の Linux ディストリビューション である Raspbian の新イメージ 2013-09-25-wheezy-raspbian が 2013/09/28 に 公開されました。 今回の目玉は Python のJITコンパイラ版である PyPy 2.1 が含まれるようになりました。また、ある意味で(?)重要な言語である Java も使えるように、公式のOracle Java 7 JDK(Java SE 7 Update 40)の hard float版 がインストールされるようになりました。 hard float と言うのは Raspberry Pi が使っている CPU (ARM1176JZFS) の浮動小数点演算プロセッサ(VFPv2)をちゃんと使って小数点を含む計算を高速にできるようにしているバージョンをいう意味です。
Raspberry Pi で使えるプログラミング言語
今回は Raspberry Pi の主目的である学習環境としてのプログラミング環境を最初に紹介します。 追加インストールすること無く使えるプログラミング言語として、C、C++、Java、Python、Pypy、Lua、LuaJIT、Perl、Awk、Ruby、アセンブラ(GNU as)といった、ほとんどすべてのメジャーなプログラミング言語がすぐに使えます。次のリストは各言語のバージョン表示を行った結果です。
$ gcc --version gcc (Debian 4.6.3-14+rpi1) 4.6.3 $ c++ --version c++ (Debian 4.6.3-14+rpi1) 4.6.3 $ javac -version javac 1.7.0_40 $ python --version Python 2.7.3 $ python3 --version Python 3.2.3 $ pypy --version Python 2.7.3 (480845e6b1dd, Jul 31 2013, 09:11:54) [PyPy 2.1.0 with GCC 4.7.2 20120731 (prerelease)] $ perl --version This is perl 5, version 14, subversion 2 (v5.14.2) built for arm-linux-gnueabihf-thread-multi-64int $ lua -v Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio $ luajit -v LuaJIT 2.0.0-beta11 -- Copyright (C) 2005-2012 Mike Pall. https://luajit.org/ $ ruby --version ruby 1.9.3p194 (2012-04-20 revision 35410) [arm-linux-eabihf] $ as --version GNU assembler (GNU Binutils for Debian) 2.22 $ bash --version GNU bash, version 4.2.37(1)-release (arm-unknown-linux-gnueabihf) $ awk -W version mawk 1.3.3 Nov 1996, Copyright (C) Michael D. Brennan
他にも Smalltalk の一種の Squeak を元にした Scratch も使えます。C# はオープンソースの .NET 環境である Mono を「sudo apt-get install mono-complete」のようにしてインストールすれば使えるようになります。
Raspberry Pi のスペック
Raspberry Pi は子供たちにコンピュータサイエンスと電子工学の基礎を学んでもらうために ケンブリッジ大学のコンピュータ研究所 にある Raspberry Pi Foundation が開発した超小型で非常に安価($35)なコンピュータです。
Raspberry Pi (Model B) | |
---|---|
CPU | Broadcom BCM2835 (ARM1176JZFS, 700MHz - 1GHz) |
GPU | Dual Core VideoCore IV (OpenGL ES 1.1/2.0) |
メモリ | 512MB (2012/10/15以前は256MB) |
USB | 2ポート |
NET | 10/100BaseT Ethernet |
サイズ | 85.60mm x 53.98mm x 17mm |
電源 | 5V 700mA |
消費電力 | 3W (ワットチェッカー による実測値) |
用意したもの
Raspberry Pi自体はCPUとメモリ付きのマザーボード単体と同じなので電源やケーブルを用意する必要があります。HDMI入力可能なテレビとスマートフォン用AC充電器、SDカードがあれ動作させることができます。以下は私が用意したものです。
- Raspberry Pi Model B 本体 私が購入した時は 3,264円(送料込み)でした。 今では Amazon でも普通に購入できるようです。
- USB接続SDカードリーダ(microSDHC×2枚同時挿入可) 私がSDカードへOSを書き込むために使った MacBook Pro17 にはSDカードスロットがないため、USBのコネクタの中にマイクロSDカードを2枚挿入できるSDカードリーダを用意しました。
- 16GB microSD (class10) Raspberry Pi はSDカードから起動するため、Linuxのイメージを書き込む必要があります。2013-09-25-wheezy-raspbian では最低 4 GB必要ですが、書き込みの速い class10 の16GBを用意しました。
- USB ACアダプタ(2000mA,2ポート) Raspberry Pi の電源は5V 700mA 必要なので、USB接続機器の分の余裕を見て2AのACアダプタを購入しました。 このアダプタを 2 つ購入して、2台の Raspberry Pi に USBの無線LANアダプタ、カメラモジュール、キーボード、マウスなどを接続して 1 年以上利用していますが、電源関連のトラブルは経験していません。
- USB-MicroB ケーブル(1.8m)Raspberry Pi側の電源コネクタは USB MicroB 形式なのでUSB Aオス-Bマイクロのケーブルを用意しました。
- HDMI-DVI アダプタケーブル(3.0m) HDMIの入力可能なテレビが近くにないのでPC用の液晶モニタに接続するためにHDMIとDVI-Dの変換ケーブルを使って接続しました。
- スーパーフラットLANケーブル
- USBキーボード,マウス切替機 キーボードとマウスをRaspberry PiとデスクトップPCの2台で共有するための切替機です。Raspberry PiのUSBコネクタを2つとも占有する事がないので便利です。ウチでは Raspberry Pi (初代) からのUSB給電だけで切替機、マウス、キーボードが問題なく動作しています。
- USB キーボード
- USB マウス
- 液晶モニタ (1600x1200、1280x1024)
2013-09-25-wheezy-raspbian のインストール
すでにRaspberry Pi で Raspbian を使っていれば、次のコマンドでも新イメージと同じ環境がインストールできるはずです。 しかし、ここでは別のSDカードに 2013-09-25-wheezy-raspbian をインストールすることにします。以下の作業を行った SD カードはデータがすべて初期化されるので、新しいカードやデータが不要なSDカードを使って下さい。
sudo apt-get update sudo apt-get upgrade
MacBook Pro17 の MacOSX 10.8.5 でインストール作業した記録です。 MacOS X ではデバイス名の指定方法が異なるだけで、Linuxと同じく dd コマンドを使ってSDカードに ディスクイメージを書き込みます。まずは SDカードのデバイス名を調べます。以下の例は、私のMacBookでの例です。適宜読み替えてください。
dd コマンドのデバイスの指定を間違えると最悪ハードディスクがすべて消えるなどの悲惨な結果が待っています。十分に注意して行なってください。
$ uname -rsv
Darwin 12.5.0 Darwin Kernel Version 12.5.0: Mon Jul 29 16:33:49 PDT 2013;
root:xnu-2050.48.11~1/RELEASE_X86_64
「sudo apt-get update && apt-get upgrade」でもほとんどの機能がインストールされるようですが、安全に別のSDカードに 2013-09-25-wheezy-raspbian をインストールしました。 ダウンロードしたディスクイメージは以下のサイズです。
$ ls -lt 2013-09-25-wheezy-raspbian.zip
-rw-r--r--@ 1 jun staff 605227145 9 28 02:48 2013-09-25-wheezy-raspbian.zip
イメージのハッシュが公式サイトにある 99e6b5e6b8cfbf66e34437a74022fcf9744ccb1d であることを確認しました。
$ shasum 2013-09-25-wheezy-raspbian.zip
99e6b5e6b8cfbf66e34437a74022fcf9744ccb1d 2013-09-25-wheezy-raspbian.zip
いつものようにMacBook Pro17 にUSB接続のmicroSDカードリーダを接続して、SDカードをアンマウント。
$ diskutil unmount /dev/disk1s1 略 /dev/disk1s1 114576 37840 76736 34% 512 0 100% /Volumes/boot $ diskutil unmount /dev/disk1s1 Volume (null) on disk1s1 unmounted
古いイメージが入っていた 16GBのclass 10 microSDカード のパーティションレコードを一応初期化しました。
$ sudo fdisk -i /dev/disk1
Password:
fdisk: could not open MBR file /usr/standalone/i386/boot0: No such file or directory
-----------------------------------------------------
------ ATTENTION - UPDATING MASTER BOOT RECORD ------
-----------------------------------------------------
Do you wish to write new MBR and partition table? [n] y
パーティションを確認。
$ sudo fdisk /dev/disk1
Password:
Disk: /dev/disk1 geometry: 1947/255/63 [31291392 sectors]
Signature: 0xAA55
Starting Ending
#: id cyl hd sec - cyl hd sec [ start - size]
------------------------------------------------------------------------
*1: AB 0 1 1 - 1023 254 63 [ 63 - 16384] Darwin Boot
2: AF 1023 254 63 - 1023 254 63 [ 16447 - 31274945] HFS+
3: 00 0 0 0 - 0 0 0 [ 0 - 0] unused
4: 00 0 0 0 - 0 0 0 [ 0 - 0] unused
zipファイルを展開します。
$ unzip 2013-09-25-wheezy-raspbian.zip Archive: 2013-09-25-wheezy-raspbian.zip inflating: 2013-09-25-wheezy-raspbian.img $ ls -lt 2013-09-25-wheezy-raspbian* -rw-r--r--@ 1 jun staff 605227145 9 28 02:48 2013-09-25-wheezy-raspbian.zip -rw-r--r--@ 1 jun staff 2962227200 9 26 07:16 2013-09-25-wheezy-raspbian.img
SDカードに書き込みます。
$ sudo time dd bs=1m if=2013-09-25-wheezy-raspbian.img of=/dev/rdisk1
2825+0 records in
2825+0 records out
2962227200 bytes transferred in 171.351243 secs (17287457 bytes/sec)
171.37 real 0.01 user 2.07 sys
ブート領域のファイルを確認します。
$ cd /Volumes/boot $ ls -lt total 37120 -rwxrwxrwx 1 jun staff 137 9 25 23:08 issue.txt -rwxrwxrwx 1 jun staff 18974 9 25 22:57 LICENSE.oracle -rwxrwxrwx 1 jun staff 142 9 25 21:25 cmdline.txt -rwxrwxrwx 1 jun staff 1180 9 25 21:25 config.txt -rwxrwxrwx 1 jun staff 17816 9 4 21:12 bootcode.bin -rwxrwxrwx 1 jun staff 5746 9 4 21:12 fixup.dat -rwxrwxrwx 1 jun staff 2037 9 4 21:12 fixup_cd.dat -rwxrwxrwx 1 jun staff 8779 9 4 21:12 fixup_x.dat -rwxrwxrwx 1 jun staff 2824280 9 4 21:12 kernel.img -rwxrwxrwx 1 jun staff 9614632 9 4 21:12 kernel_emergency.img -rwxrwxrwx 1 jun staff 2497684 9 4 21:12 start.elf -rwxrwxrwx 1 jun staff 471256 9 4 21:12 start_cd.elf -rwxrwxrwx 1 jun staff 3476100 9 4 21:12 start_x.elf
/boot/config.txt を確認してみます。バージョンアップでも特に変更されていません。
$ cat -n config.txt 1 # uncomment if you get no picture on HDMI for a default "safe" mode 2 #hdmi_safe=1 3 4 # uncomment this if your display has a black border of unused pixels visible 5 # and your display can output without overscan 6 #disable_overscan=1 7 8 # uncomment the following to adjust overscan. Use positive numbers if console 9 # goes off screen, and negative if there is too much border 10 #overscan_left=16 11 #overscan_right=16 12 #overscan_top=16 13 #overscan_bottom=16 14 15 # uncomment to force a console size. By default it will be display's size minus 16 # overscan. 17 #framebuffer_width=1280 18 #framebuffer_height=720 19 20 # uncomment if hdmi display is not detected and composite is being output 21 #hdmi_force_hotplug=1 22 23 # uncomment to force a specific HDMI mode (this will force VGA) 24 #hdmi_group=1 25 #hdmi_mode=1 26 27 # uncomment to force a HDMI mode rather than DVI. This can make audio work in 28 # DMT (computer monitor) modes 29 #hdmi_drive=2 30 31 # uncomment to increase signal to HDMI, if you have interference, blanking, or 32 # no display 33 #config_hdmi_boost=4 34 35 # uncomment for composite PAL 36 #sdtv_mode=2 37 38 #uncomment to overclock the arm. 700 MHz is the default. 39 #arm_freq=800 40 41 # for more options see https://elinux.org/RPi_config.txt
新しいイメージで起動
インストールしたSDカードをRaspberry Piにセットして起動。
最初の起動時に表示される設定画面
起動すると、最初の1回だけ初期設定を行う以下の画面が表示されます。Linuxのデスクトップが表示されると思っているとちょっと面食らいます。
上下のカーソルキーで項目を移動して、[TAB]キーで <Select> を選択、[Return]キーを押して各項目の設定画面に移動します。「sudo raspi-config」でいつでも実行できるので、後からでも設定できます。
「Expand Filesystem」は最初に書き込んだ3GBのイメージをSDカードすべてを使うように拡張するため、最初に実行しておいたほうがいいでしょう。
Expand Filesystem
【重要】容量の大きいSDカードを使用しても、最初は先頭の 3GB 程度の パーティションを使うだけになっていて無駄になるため、このコマンドを 選択してSDカードの容量全体を使うように設定できます。設定後に再起動が 必要ですが、処理に時間がかかるため、ハングアップと間違えないように 注意して下さい。
Change User Password
'pi' ユーザのパスワードを変更します。 次のようにコンソールの画面で新しいパスワードを2回入力します。
Enter new UNIX password: Retype new UNIX password:
Enable Boot to Desktop/Scratch
起動時に直接GUIな画面(Xのデスクトップを表示)に移行する場合は2行目 を選択します。しばらくは、デフォルトのコンソールでログインしてから、 「startx」コマンドで X を起動することをオススメします。 3行目を選択すると Scratch のプログラミング環境が開始されるようです。 子供用でしょうか。
Internationalisation Options
国際化関連の「ロケール」、「タイムゾーン」、「キーボード配列」の設定です。
- Change Locale
- ロケールの設定です。最初は設定しない ほうがいいでしょう。 「ja_JP.UTF-8 UTF-8」を選択するとメニューなどが 日本語化されますが、最初は日本語フォントがインストールされていないため、 文字化けします。
- Change Timezone
- 時間の設定です。日本時間は 「Asia」、「Tokyo」 と指定します。
- Change Keyboard Layout
- キーボードの配列を指定します。普通は「Generic 105-key (Intl) PC」
を選択して「Japanese - Japanese (OADG 109A) 」でいいでしょう。
日本語を選択するため、ここでは「Other」を選びます。
ここでは「Japanese」を選びます。
キーボードの配列は「Japanese - Japanese (OADG 109A) 」でいいでしょう。
よくわかりませんが、関係ないでしょう。
これも不要と思います。
[Ctrl] + [Alt] + [BackSpace] のキーの組み合わせで X を強制終了する事ができるようになります。「startx」で X を始めている場合には「Yes」を設定しておくと使う時があるかもしれません。
Enable Camera
カメラモジュールを接続している場合は 「Enable」にします。 カメラモジュールの使い方は 前のページ を参考にして下さい。
Add to Rastrack
Overclock
CPU、GPU、メモリのクロックの初期設定はそれぞれ700MHz、250MHz、 400MHzですが、高負荷になった場合、オーバークロックして最大CPUは 1GHz、GPU は 500MHz、メモリは 600MHz まで高速化する事が出来ます。 過度のオーバークロックはシステムの寿命を短くする可能性、SDカード (の内容)を壊す可能性があるという警告が表示されるので、「自己責任で」 ということになります。
選択すると、「オーバークロックするとRaspberry Piの寿命を縮める 可能性があります。もしオーバークロックしてシステムが不安定になったら、 もっとマイルドな設定を試して下さい。 詳細は https://elinux.org/RPi_Overclocking を参照してね。」という感じの注意書きが表示されます。
デフォルトの 700MHz から 1GHz までの選択肢が表示されます。 「0 overvolt」 は 1.2V、「6 overvolt」は電圧を1.35Vに設定することを 示します。ここで選択した設定には CPU が85%以上の負荷になると切り 替わります。CPUがアイドル状態になると元 (700MHz) に戻ります。 また、CPU の温度が 85 ℃を超えると 700MHz に戻ります。
raspi-configを使ったオーバークロック設定では、オーバークロック状態で ブートすることはないと思いますが、万一システムが不安定になってブートに失敗する場合でも、起動時にシフトキーを押し続けることで遅いクロックで起動させる事が出来るようです。
Advanced Options
その他のオプションです。
- Overscan
- 画面の周囲をちょっと空けるオーバースキャンを設定します。 画面周囲が切れるような場合(テレビ?)に使用します。
- Hostname
- ホストネームの設定です。
- Memory Split
- CPUとGPUへのメモリの配分を変更します。ここで設定した値 (MB単位) が GPU へ割り当てられ、残りは CPU (ARM) に割り当てられます。 MB単位の数値を入力します。デフォルトは 128MB になっています。
- SSH
- ネットワーク越しにコマンドラインに接続する場合には「Enable」 を選択します。最初から「Enable」になっています。ネットワーク 越しに操作するだけの使い方ならば、キーボードもマウスもディスプレイ も不要です。
- SPI
- SPI (Serial Peripheral Interface) を使う場合に設定するらしい。 よく知りません。
- Update
- この raspi-config の新しいバージョンがあれば取得します。
About raspi-config
このツールの情報が表示されますが、特に内容はありません。
起動
初回の起動時に設定した「Expand Filesystem」によって、次の起動時にファイルシステムを SDカード全体に再構成します。しばらく時間がかかるのでログインできるまで待つ必要があります。 16GBのSDカードで起動した場合のファイルシステムの状態です。
pi@raspberrypi ~ $ df Filesystem 1K-blocks Used Available Use% Mounted on rootfs 15343796 1772536 12921680 13% / /dev/root 15343796 1772536 12921680 13% / devtmpfs 183596 0 183596 0% /dev tmpfs 38372 256 38116 1% /run tmpfs 5120 0 5120 0% /run/lock tmpfs 76740 0 76740 0% /run/shm /dev/mmcblk0p1 57288 18624 38664 33% /boot
すでに 1.8GB ほどが使われています。 参考のため「Expand Filesystem」を行わない場合の ファイルシステムの状態を示します。
pi@raspberrypi ~ $ df
Filesystem 1K-blocks Used Available Use% Mounted on
rootfs 2786872 1769020 876284 67% /
/dev/root 2786872 1769020 876284 67% /
devtmpfs 216108 0 216108 0% /dev
tmpfs 44876 264 44612 1% /run
tmpfs 5120 0 5120 0% /run/lock
tmpfs 89740 0 89740 0% /run/shm
/dev/mmcblk0p1 57288 18624 38664 33% /boot
3GBのイメージでは空き領域が少ないことが分かります。
LjES 近況
LuaJIT という非常に高速なスクリプト言語を使って 3Dアニメーションのプログラミングを行うためのライブラリ LjESですが、最近やっとCOLLADAファイルを(一部)読み込めるようになりました。 下のスクリーンショットは https://blender.rgr.jp/m/ から miku_ver1_1_1.blend (8.8MB) をお借りして、blender 2.68 上で COLLADAファイルに変換したものを LjES を使ったプログラムで読み込んで表示したものです。 テクスチャを1枚しか利用していない、ヘッドフォンが足の下に表示されているなど、miku_ver1_1_1.blend のモデルより劣化しています。 まだ、ボーンのコントロールがうまくいかないなどの問題があるので新バージョンの公開はまだ先になりそうです。 頂点が 5万もある三次元モデルでも十分に高速に表示できています。