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 Mathematica や Oracle 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