Raspberry Piのブート用SDカードの作成 (2012/07/21)

SDカードの準備

今回は最近のメインマシンである MacBook Pro17 (MacOSX 10.7.4) を使って Raspbian の公式ディスクイメージ(Debian 7.0 wheezy) を使ってSDカードを準備しました。 17インチのMacBook Pro にはSDカードスロットが無いので、USB接続のmicroSDカードリーダを介して16GBのclass 10 microSDカードへ書き込みました。

より新しいバージョンに関する記事
2012-08-16-wheezy-raspbian のインストール
2012-09-18-wheezy-raspbian のインストール
2012-10-28-wheezy-raspbian のインストール
2012-12-16-wheezy-raspbian のインストール
2013-02-09-wheezy-raspbian のインストール
2013-05-25-wheezy-raspbian のインストール
2013-09-25-wheezy-raspbian のインストール
2013-12-20-wheezy-raspbian のインストール
2014-06-20-wheezy-raspbian のインストール
2014-09-09-wheezy-raspbian のインストール
2014-12-24-wheezy-raspbian のインストール
2015-01-31-raspbian のインストール (Pi2)
2015-05-05-wheezy-raspbian のインストール
2015-09-24-raspbian-jessie のインストール
2016-02-03-raspbian-jessie のインストール
2016-02-26-raspbian-jessie のインストール(Pi3対応)
2017-11-29-raspbian-stretch

SDカードイメージのダウンロード

http://www.raspberrypi.org/downloads から 2012-07-15-wheezy-raspbian.zip をダウンロードしました。 ダウンロードしたファイルのSHA-1 を求めて、公式サイトのSHA-1 の値と一致することを確認しました。


$ shasum 2012-07-15-wheezy-raspbian.zip
3947412babbf63f9f022f1b0b22ea6a308bb630c  2012-07-15-wheezy-raspbian.zip

SDカードイメージのSDカードへの書き込み(MacOS X 編)

MacOS X ではデバイス名の指定方法が異なるだけで、Linuxと同じく dd コマンドを使ってSDカードに ディスクイメージを書き込みます。まずは SDカードのデバイス名を調べます。以下の例は、私のMacBookでの例です。適宜読み替えてください。

dd コマンドのデバイスの指定を間違えると最悪ハードディスクがすべて消えるなどの悲惨な結果が待っています。十分に注意して行なってください。

カードリーダ接続前

$ df -h
Filesystem      Size   Used  Avail Capacity  Mounted on
/dev/disk0s2   698Gi   94Gi  604Gi    14%    /
devfs          182Ki  182Ki    0Bi   100%    /dev
map -hosts       0Bi    0Bi    0Bi   100%    /net
map auto_home    0Bi    0Bi    0Bi   100%    /home

カードリーダ接続後

$ df -h
Filesystem      Size   Used  Avail Capacity  Mounted on
/dev/disk0s2   698Gi   94Gi  604Gi    14%    /
devfs          184Ki  184Ki    0Bi   100%    /dev
map -hosts       0Bi    0Bi    0Bi   100%    /net
map auto_home    0Bi    0Bi    0Bi   100%    /home
/dev/disk1s1    15Gi  2.2Mi   15Gi     1%    /Volumes/NO NAME

SDカードのデバイス名が /dev/disk1s1 であることを確認しました。 SDカードをアンマウントします。

$ diskutil unmount /dev/disk1s1
Volume NO NAME on disk1s1 unmounted

SDカードのデバイス名は /dev/disk1s1 でしたが、書き込みは同じデバイスでバッファリングしないrawデバイス(/dev/rdisk1)を指定して行いました。

$ sudo time dd bs=1m if=2012-07-15-wheezy-raspbian.img of=/dev/rdisk1
1850+0 records in
1850+0 records out
1939865600 bytes transferred in 104.871126 secs (18497614 bytes/sec)
      104.97 real         0.00 user         0.94 sys

ディスクイメージの書き込み速度は 18MB/s でした。Class 10 のSDHCカードの転送速度は 10MB/sec 以上ということなので十分速いことが確認できました。

マウント状況を確認します。

$ df -h
Filesystem      Size   Used  Avail Capacity  Mounted on
/dev/disk0s2   698Gi   96Gi  602Gi    14%    /
devfs          186Ki  186Ki    0Bi   100%    /dev
map -hosts       0Bi    0Bi    0Bi   100%    /net
map auto_home    0Bi    0Bi    0Bi   100%    /home
/dev/disk1s1    56Mi   34Mi   22Mi    61%    /Volumes/Untitled

先頭のパーティションはFAT32なのでマウントして内容を確認することができます。16GBのSDカードに2GBのディスクイメージを書き込んでいるため、残りの12GBが気になりますが、Raspberry Piをブートした後に残りの容量を使い切るように設定できるので大丈夫です。

$ cd /Volumes/Untitled/
$ ls -l
total 69024
-rwxrwxrwx  1 jun  staff   2051056  7 15 18:10 arm128_start.elf
-rwxrwxrwx  1 jun  staff   2051056  7 15 18:10 arm192_start.elf
-rwxrwxrwx  1 jun  staff   2051056  7 15 18:10 arm224_start.elf
-rwxrwxrwx  1 jun  staff     16536  7 15 18:10 bootcode.bin
-rwxrwxrwx  1 jun  staff       142  7 15 20:06 cmdline.txt
-rwxrwxrwx  1 jun  staff      1180  7 15 20:06 config.txt
-rwxrwxrwx  1 jun  staff       137  7 15 20:44 issue.txt
-rwxrwxrwx  1 jun  staff   6263772  7 15 18:10 kernel.img
-rwxrwxrwx  1 jun  staff   4189540  7 15 18:10 kernel_cutdown.img
-rwxrwxrwx  1 jun  staff  16321844  7 15 18:10 kernel_emergency.img
-rwxrwxrwx  1 jun  staff    275235  7 15 18:10 loader.bin
-rwxrwxrwx  1 jun  staff   2051056  7 15 18:10 start.elf

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

$ sudo diskutil unmount /dev/disk1s1
Volume (null) on disk1s1 unmounted

Raspberry Piの起動

作成したブート用のSDカードをRaspberry Pi に取り付けて電源をつなぎます。

最初の起動時に表示される設定画面

起動すると、最初の1回だけ初期設定を行う以下の画面が表示されます。Linuxのデスクトップが表示されると思っているとちょっと面食らいます。

上下のカーソルキーで項目を移動して、[TAB]キーで <Select> を選択、[Return]キーを押して各項目の設定画面に移動します。

info
このツールの情報が表示されますが、特に内容はありません。
expand_rootfs
【重要】容量の大きいSDカードを使用しても、最初は先頭の2GB程度のパーティションを使うだけになっていて無駄になるため、このコマンドを選択してSDカードの容量全体を使うように設定できます。設定後、再起動が必要です。
overscan
画面の周囲をちょっと空けるオーバースキャンを設定します。画面周囲が切れるような場合(テレビ?)に使用します。
configure_keyboard
キーボードの配列を指定します。普通は「Generic 105-key (Intl) PC」を選択して「Japanese - Japanese (OADG 109A) 」でいいでしょう。
change_pass
【重要】'pi' ユーザのパスワードを変更
change_locale
ロケールの設定です。最初は設定しないほうがいいでしょう。 「ja_JP.UTF-8 UTF-8」を選択するとメニューなどが日本語化されますが、最初は日本語フォントがインストールされていないため、文字化けします。
change_timezone
時間の設定です。日本時間は 「Asia」、「Tokyo」 と指定します。
memory_split
CPUとGPUへのメモリの配分を変更します。GPUへは32MiBのまま変更しないほうがいいでしょう。
ssh
ネットワーク越しにコマンドラインに接続する場合には「Enable」を選択します。
boot_behaviour
起動時に直接GUIな画面(Xのデスクトップを表示)に移行する場合は「Yes」を選択します。
update
この raspi-config の新しいバージョンがあれば取得します。

2番めの「expand_rootfs」と「change_pass」で'pi' ユーザのパスワード変更は実行しておいたほうがいいでしょう。「sudo raspi-config」でいつでも実行できるので、後からでも設定できます。

再起動

再起動後、ログインして「startx」を実行するとデスクトップが表示されます。下のスクリーンショットは背景の色を変更しています。


参考

expand_rootfsを実行する前後のSDカードのパーティションの状態を示します。上(実行前)はUSBポートに接続、下(実行後)はSDカードスロットに接続して fdisk を実行しました。

# fdisk -l /dev/sda

Disk /dev/sda: 16.0 GB, 16021192704 bytes
64 heads, 32 sectors/track, 15279 cylinders, total 31291392 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000714e9

   Device Boot        Start         End      Blocks   Id  System
/dev/sda1              8192      122879       57344    c  W95 FAT32 (LBA)
/dev/sda2            122880     3788799     1832960   83  Linux

総セクター数が 31,291,392 のところ、3,788,800 しか使っていません。

# fdisk -l /dev/mmcblk0

Disk /dev/mmcblk0: 16.0 GB, 16021192704 bytes
4 heads, 16 sectors/track, 488928 cylinders, total 31291392 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000714e9

        Device Boot   Start         End      Blocks   Id  System
/dev/mmcblk0p1         8192      122879       57344    c  W95 FAT32 (LBA)
/dev/mmcblk0p2       122880    31291391    15584256   83  Linux

すべてのセクター(31,291,392セクター)が使用されています。


「アセンブリで浮動小数点数表示」に続く...