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 の主目的である学習環境としてのプログラミング環境を最初に紹介します。 追加インストールすること無く使えるプログラミング言語として、CC++JavaPythonPypyLuaLuaJITPerlAwkRubyアセンブラ(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カードがあれ動作させることができます。以下は私が用意したものです。


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
Rastrack https://rastrack.co.uk/ への登録を行うスクリプトです。直接サイトへ行ってもできるので、 特に必要ありません。

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万もある三次元モデルでも十分に高速に表示できています。


リリースしました。(2014/03/31)


続く...