2014-06-20-wheezy-raspbian とリアルタイムクロック(2014/06/26)

Raspberry Pi 専用の Linux ディストリビューション である Raspbian の新イメージ 2014-06-20-wheezy-raspbian が 2014/06/23 に 公開されました。 Raspbianのイメージは約半年ぶりの更新です。 例によって Raspbian の新イメージをインストールした記録です。

個人的な大きなニュースとして、今回は Linux カーネルのバージョンが 3.10.24+ から 3.12.22+ に上がっています。 私が使っている Raspberry Pi 用の拡張ボード は、リアルタイムクロック用のチップとして NXP PCF2127ATを使っていますが、これまでのカーネルではモジュール (rtc-pcf2127) が含まれていないため、古い(3.6.11)専用のカーネルを使うか、自分でカーネルをコンパイルするしかありませんでした。今回のバージョンアップで、やっと標準のカーネルでリアルタイムクロックが利用できるようになりました。あまり役立つ人はいないかもしれませんが、リアルタイムクロックを使う設定も書いておきます。

数式処理ソフトの Wolfram MathematicaOracle Java 7 JDK(Java SE 7 Update 40)も引き続きディスクイメージに含まれています。


最近では、Raspberry Pi の OS をSDカードにインストールするための初心者向けディスクイメージとして公式サイトでも NOOBS (New Out Of the Box Software) が勧められています。 公式サイトのダウンロードページに置いてある 6 種類のOSから選んでインストールできますが、サイズが大きくかなり時間もかかるため、私は Raspbian のイメージをインストールする方法をお勧めします。

2014-06-20-wheezy-raspbian のインストール

すでにRaspberry Pi で Raspbian を使っていれば、次のコマンドでも新イメージと同じ環境がインストールできるはずです。 しかし、ここでは別のSDカードに 2014-06-20-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 13.2.0 Darwin Kernel Version 13.2.0: Thu Apr 17 23:03:13 PDT 2014;
 root:xnu-2422.100.13~1/RELEASE_X86_64

ダウンロードしたディスクイメージは以下のサイズです。

$ ls -lt 2014-06-20-wheezy-raspbian.zip
-rw-r--r--@  1 jun staff  826192020  6 23 01:57 2014-06-20-wheezy-raspbian.zip

イメージのハッシュ(SHA-1 Checksum)が公式サイトにある b020908e3cba472a24f7a17498008eb69d86d1cb であることを確認しました。

$ shasum 2014-06-20-wheezy-raspbian.zip
b020908e3cba472a24f7a17498008eb69d86d1cb  2014-06-20-wheezy-raspbian.zip

いつものようにMacBook Pro17 にUSB接続のmicroSDカードリーダを接続して、SDカードをアンマウントします。 今回は Mac にFUSE for OS Xをインストールしているため、Linuxのパーティションもマウントされています。両方をアンマウントしました。

$ df
Filesystem    512-blocks      Used  Available Capacity  iused     ifree %iused  Mounted on
 略
/dev/disk1s2    30687672   4482040   24906472    16%    78771    878941    8%   /Volumes/Untitled
/dev/disk1s1      114576     38192      76384    34%      512         0  100%   /Volumes/boot

$ diskutil unmount /dev/disk1s1
Volume boot on disk1s1 unmounted
$ diskutil unmount /dev/disk1s2
Volume  on disk1s2 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
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 2014-06-20-wheezy-raspbian.zip
Archive:  2014-06-20-wheezy-raspbian.zip
  inflating: 2014-06-20-wheezy-raspbian.img  

$ ls -lt 2014-06-20-wheezy-raspbian*
-rw-r--r--@ 1 jun  staff   826192020  6 23 01:57 2014-06-20-wheezy-raspbian.zip
-rw-r--r--@ 1 jun  staff  2962227200  6 20 19:17 2014-06-20-wheezy-raspbian.img

SDカードに書き込みます。

$ sudo time dd bs=1m if=2014-06-20-wheezy-raspbian.img of=/dev/rdisk1
2825+0 records in
2825+0 records out
2962227200 bytes transferred in 183.348302 secs (16156284 bytes/sec)
      183.40 real         0.00 user         1.85 sys

ブート領域のファイルを確認します。

$ cd /Volumes/boot
$ ls -lt
total 19312
-rwxrwxrwx  1 jun  staff      137  6 20 10:33 issue.txt
-rwxrwxrwx  1 jun  staff      120  6 20 06:51 cmdline.txt
-rwxrwxrwx  1 jun  staff     1180  6 20 06:51 config.txt
-rwxrwxrwx  1 jun  staff    17824  6 19 19:59 bootcode.bin
-rwxrwxrwx  1 jun  staff     5845  6 19 19:59 fixup.dat
-rwxrwxrwx  1 jun  staff     2090  6 19 19:59 fixup_cd.dat
-rwxrwxrwx  1 jun  staff     8822  6 19 19:59 fixup_x.dat
-rwxrwxrwx  1 jun  staff  3192224  6 19 19:59 kernel.img
-rwxrwxrwx  1 jun  staff  2557720  6 19 19:59 start.elf
-rwxrwxrwx  1 jun  staff   512792  6 19 19:59 start_cd.elf
-rwxrwxrwx  1 jun  staff  3500744  6 19 19:59 start_x.elf
-rwxrwxrwx  1 jun  staff    18974  9 25  2013 LICENSE.oracle

/boot/config.txt を確認してみます。バージョンアップでも特に変更されていません。

$ cat config.txt 
# uncomment if you get no picture on HDMI for a default "safe" mode
#hdmi_safe=1

# uncomment this if your display has a black border of unused pixels visible
# and your display can output without overscan
#disable_overscan=1

# uncomment the following to adjust overscan. Use positive numbers if console
# goes off screen, and negative if there is too much border
#overscan_left=16
#overscan_right=16
#overscan_top=16
#overscan_bottom=16

# uncomment to force a console size. By default it will be display's size minus
# overscan.
#framebuffer_width=1280
#framebuffer_height=720

# uncomment if hdmi display is not detected and composite is being output
#hdmi_force_hotplug=1

# uncomment to force a specific HDMI mode (this will force VGA)
#hdmi_group=1
#hdmi_mode=1

# uncomment to force a HDMI mode rather than DVI. This can make audio work in
# DMT (computer monitor) modes
#hdmi_drive=2

# uncomment to increase signal to HDMI, if you have interference, blanking, or
# no display
#config_hdmi_boost=4

# uncomment for composite PAL
#sdtv_mode=2

#uncomment to overclock the arm. 700 MHz is the default.
#arm_freq=800

# for more options see https://elinux.org/RPi_config.txt

SDカードをアンマウントして取り出します。

$ df
$ df
Filesystem    512-blocks      Used  Available Capacity  iused     ifree %iused  Mounted on
 略
/dev/disk1s2     5573760   4172792    1117832    79%    76672    100384   43%   /Volumes/Untitled
/dev/disk1s1      114576     19376      95200    17%      512         0  100%   /Volumes/boot

$ diskutil unmount /dev/disk1s1
Volume boot on disk1s1 unmounted
$ diskutil unmount /dev/disk1s2
Volume  on disk1s2 unmounted

新しいイメージで起動

インストールしたSDカードをRaspberry Piにセットして起動。 最初の起動時に設定画面が表示されますが、前のバージョンから変わっていないので、 2013-09-25-wheezy-raspbian の設定画面の解説を参考にして下さい。

カーネルが新しくなっていることが確認できます。

pi@raspberrypi ~ $ uname -a
Linux raspberrypi 3.12.22+ #691 PREEMPT Wed Jun 18 18:29:58 BST 2014 armv6l GNU/Linux

リアルタイムクロック

リアルタイムクロックを搭載した拡張ボードには、チップとして NXP PCF2127AT を使っているものがあります。 RasClock私が使っている www.suptronics.com の Raspberry Pi Expansion Board です。 これまでの linux-3.10 以前のカーネルでは pcf2127 用のモジュールが含まれていないため、古い(3.6.11)専用のカーネルを使うか、自分でカーネルをコンパイルするしかありませんでした。今回のバージョンアップで Linux カーネルが 3.10.24+ から 3.12.22+ に上がっています。やっと標準のカーネルで i2cバスにつながったリアルタイムクロック が利用できるようになります。

設定ファイルの修正

/etc/modules

起動時に読み込むカーネルモジュールを追加します。

# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
# Parameters can be specified after the module name.

snd-bcm2835
i2c-bcm2708
rtc-pcf2127

/etc/modprobe.d/raspi-blacklist.conf の修正

通常使用することのないモジュールをブラックリストとしてロードしないようにする設定です。 i2c-bcm2708 の行の前に「#」を追加してコメントアウトします。

# blacklist spi and i2c by default (many users don't need them)

blacklist spi-bcm2708
#blacklist i2c-bcm2708

/etc/rc.local

起動スクリプトの最後のほうにリアルタイムクロックの登録とシステム時刻への書き込みを行います。

  略
sh /root/gpio_shutdown.sh &

echo pcf2127 0x51 > /sys/class/i2c-adapter/i2c-1/new_device
( sleep 2; hwclock -s ) &

exit 0

再起動とリアルタイムクロックの動作確認

シャットダウンしてから再起動して動作確認します。

カーネルモジュールの確認

pi@raspberrypi ~ $ lsmod
Module                  Size  Used by
rfcomm                 33132  10 
bnep                   11030  2 
rtc_pcf2127             2575  0 
snd_bcm2835            18169  0 
sg                     19328  0 
snd_soc_wm8804          7833  0 
snd_soc_pcm512x         8909  0 
8192cu                551136  0 
snd_soc_bcm2708_i2s     5486  0 
regmap_mmio             2818  1 snd_soc_bcm2708_i2s
snd_soc_core          128166  3 snd_soc_pcm512x,snd_soc_wm8804,snd_soc_bcm2708_i2s
btusb                  16077  0 
regmap_spi              1913  3 snd_soc_pcm512x,snd_soc_wm8804,snd_soc_core
snd_pcm_dmaengine       5481  1 snd_soc_core
snd_pcm                81518  3 snd_bcm2835,snd_soc_core,snd_pcm_dmaengine
snd_page_alloc          5168  1 snd_pcm
regmap_i2c              1657  3 snd_soc_pcm512x,snd_soc_wm8804,snd_soc_core
snd_compress            8136  1 snd_soc_core
snd_seq                54581  0 
snd_timer              20353  2 snd_pcm,snd_seq
snd_seq_device          6485  1 snd_seq
leds_gpio               2055  0 
led_class               4119  1 leds_gpio
evdev                  10497  1 
snd                    61518  7 snd_bcm2835,snd_soc_core,snd_timer,snd_pcm,snd_seq,snd_seq_device,snd_compress
bluetooth             225845  24 bnep,btusb,rfcomm
rfkill                 19567  3 bluetooth
i2c_bcm2708             4719  0 

時刻の表示

hwclock はリアルタイムクロックにアクセスするためのコマンドです。 時刻の表示 (hwclock -r)、指定時刻へのクロックの設定 (hwclock --set --date="2014-06-26 23:00:59")、システム時刻をリアルタイムクロックに設定 (hwclock -w)、 リアルタイムクロックの時刻をシステム時刻に設定 (hwclock -s) という機能を持ちます。

pi@raspberrypi ~ $ sudo hwclock -r
Wed 25 Jun 2014 23:27:12 JST  -0.326962 seconds


続く...