Day5 raspi-configを研究する

今回は、Raspbianの種々の設定を行うためのコマンドであるraspi-configについて勉強したことをまとめる。


##########rapi-configの各項目について#############
まずは、raspi-configを起動する
$ sudo raspi-config
1 Expand Filesystem
SDカードの未使用領域を拡張して、すべての容量を使えるようにする

2 Change User Password
piユーザーのパスワード変更

3 Enable Boot to Desktop/Scratch
GUI起動をデフォルトにするかを設定できる。

4 Internationalisation Options
     Change Local
     Change Timezone
     Change Keyboard
国際化設定メニュー。sshで接続している分には、とりあえずTime ZoneだけAsian -> Tokyoに変更した。

5 Enable Camera
カメラモジュールを使用可能にする。また今度設定する。

6 Add to Rastrack
Rastrackの登録(http://rastrackco.jk/)

7 Overclock
オーバークロオクの設定。特に変更の必要はない。

8 Advanced Options
     Overscan     画面表示において余白を取るか、目一杯取るか
     Hostname     ホスト名の設定
     Memory Split     CPUに割り当てるメモリの容量の設定。GPUとの兼ね合いを考えるときに必要。
     SSH     sshサーバーを起動するかどうかの設定。デフォルトではEnabledになっているのでそのままで良い。万が一、セキュリティ上、offにしたい場合には、Disableにする必要がある。
     SPI     SPIを使うためのKernelモジュールを読み込むかどうかの設定
     Update     Raspi-configのアップデート
9 About raspi-config
raspi-configの説明

###########################################




##########raspi-configの本体を暴く#############
raspi-configは実は、単なるシェルスクリプトのようです。つまり、raspi-configは我々がコマンドラインを通してもできることを、インタラクティブな環境を提供することで簡略化していると言えるでしょう。

それでは、raspi-configの中身を見てみます。

raspi-configのパスを知る
$ which raspi-config
/usr/bin/raspi-config

raspi-configの中身を閲覧する
$ less /usr/bin/raspi-config

ファイル内をいろいろ見てみると、expand_rootfsの項目にfdiskが出てきたりと、raspi-configの裏で動くコマンドの数々が理解できます。
###########################################
 


【参考文献】
林和孝『Raspberry Piで遊ぼう』ラトルズ 2014 Chapter 2
Japanese Raspberry Pi Users Group『Raspberry Pi[実用]入門』技術評論社 2013

Day4 expand_rootfsで、ルートファイルシステムを最大限に拡張する

http://kappa-bioinformatics.blogspot.jp/2014/02/raspbiansd.htmlで書いたように、Raspbianのルートファイルシステムのは3G弱しかない。よって、一般的なSDカードに最初のセクタからddコマンドでベタ書きするのでは容量が有効に使えないのである。そこで、raspi-configの中にあるexpand_rootfsという機能を使用する。これにより、ルートファイルシステムを空き容量を最大限使って拡張することができる。

Raspbianへアクセス(Macより)
$ ssh pi@192.168.11.3


まずは、既存のファイルシステムのサイズの確認
$ df -h












次に、raspi-configを呼び出す
$ sudo raspi-config



「1 Expand Filesystem」を選択してEnterをおす。すると、処理が実行される。


raspi-configをfinishするときにリブートすることを求められるため、それに応じる。


再度、手元のMacからRaspbianにアクセスする。
$ ssh 192.168.111.3

ファイルシステムの容量を確認する
$ df -h

目的通りにSDカードの容量いっぱいにルートファイルシステムが拡張された事がわかる。


###############参考文献##################
Eben Upton、Gareth Halfacree著、株式会社クイープ訳『Raspberry Piユーザーガイド』インプレスジャパン 2013
Japanese Raspberry Pi Users Group『Raspberry Pi[実用]入門』技術評論社 2013
nekosan『「Raspberry Pi」でつくる電子工作』工学社 2013
###################################################

Day3 必要最小限のハードウェア構成でRaspberry Piを起動する

Raspberry Piの魅力は、あの小さなボードに様々な種類のI/Oポートが備え付けられており、簡単にディスプレイやスピーカーに出力することができることです。しかし、普段の生活でMacbookだけを使用しているような私のような人間には、わざわざハードウェア一式をそろえるのは少々労力を要します。そこで、Raspberry Pi上でRaspbianをブートして、SSHで外部から接続するのに、必要最小限のハードウェア構成を見つけました。

#必要最小限のハードウェア4点
Raspberry Pi Model B R2
有線LANケーブル
SDカード(Raspbianフラッシュ済み)
Micro USB電源アダプター
手順は、以下のようになります。

1. Raspberry PiにLANケーブルとSDカードが接続されていることを確認した後、電源アダプターを接続して、通電する。

2. ルーターにアクセスして、Raspberry Piに対してどのようなIPアドレスが割り振られているかを確認する。(ここでは192.168.11.xxxとする)
 raspberry piのipアドレスを手元のmacbookから調べるには、ルーターにアクセスする必要がある。私の環境ではBuffalo Airstationでdhcpを使っており、192.168.11.1でルータにアクセスすることができる。次に「インターネット/LAN」をクリックして、DHCPリースをクリック。すると、家庭内ネットワークに接続している端末の情報がすべて閲覧できる。その中から、Raspberry Piと思わしきものを同定し、「手動割り当てに変更」をクリックする。すると次回以降、Raspberry Piはこのルータから一定のIPアドレスを割り当てられることとなり、ssh接続が容易となる。今回は192.168.11.3を固定的に割り当てることとする。

3.    以下のコマンドでRaspberry Piに接続する
$ ssh pi@192.168.11.3

4. ログイン後は、raspi-configによる初期設定が終了していないと警告が表示されるので、
$ raspi-config
と入力して、raspi-configを開き、「finish」にカーソルを合わせてEnterを押せばよい。これで初期設定は完了である。

次回、以降は細かな設定を行う。raspi-configコマンドは今後も頻繁に使用する事になる。


【参考文献】
Eben Upton、Gareth Halfacree著、株式会社クイープ訳『Raspberry Piユーザーガイド』インプレスジャパン 2013

Day2 Raspberry Piの構成

Raspberry Piの基盤の上に設置されているチップやI/Oについて勉強したことをまとめる。

以下の図は、fritzingで書いたRaspberry Pi Model Bの基盤。


こちらがRaspberry Piのブロック図



#Micro USB(電源用)
Raspberry Pi Model Bでは2V, 700mA程度が必要とされる。PCのUSB端子からの電流は規格上、500mA以上は流れないことになっている。そのため、スマートフォン用のACアダプタに接続するタイプの電源が必要である。

#HDMI
家電やAV機器向けのデジタル映像・音声入出力インターフェース規格のこと。一つのケーブルで画像と音声の入出力が同時にできる。

#LAN
有線LANのポートがあります。

#USB
USBのポートが2つあります。

#RCA端子(黄色)とステレオジャック
HDMIで画像・音声の入出力を行わない場合は、こちらの方法を選択することになる。RCA端子のことをコンポジット端子とも呼ぶ。

#DSIコネクタ
LCD: Liquid Crystal Display(液晶ディスプレイ)用の拡張ポート。

#CSIコネクタ
カメラモジュール接続用の拡張ポート。

#低レベル/O
上に書いた高レベルのI/Oだけでなく、低レベルのI/Oを扱う事ができることがRaspberry Piの魅力。26本の端子があり、8個のGPIO(汎用入出力)、UART(シリアル通信)、I2C(電子回路のシリアル通信)、SPI(電子回路のシリアル通信)と2つのチップセレクトピンの他、電源用に3.3V, 5V, GND端子が容易されている。


#BCM2835
最高700MHzで動作するARM11(ARM1176JZF-S)をCPUのコアにして、DRAMやビデオコントローラー、タイマー、USBホスト、UART、SPIなどのペリフェラルを内蔵している。このように、1つの半導体チップ上に必要とされる一連の機能を集積する集積回路の設計手法をSoC(System-on-a-Chip)と呼ぶ。

#LAN9512
USBハブとLANコントローラ内臓のLANチップ。

BCM2835の内部ブロック



【参考文献】
Raspberry Pi Quick Start Guide : http://www.designspark.com/knowledge-item/raspberry-pi-quick-start-guide
Raspberry Pi公式サイトの回路図:http://www.raspberrypi.org/quick-start-guide
『お手軽ARMコンピュータ ラズベリー・パイでI/O』CQ出版株式会社 2013
Eben Upton、Gareth Halfacree著、株式会社クイープ訳『Raspberry Piユーザーガイド』インプレスジャパン 2013
Japanese Raspberry Pi Users Group『Raspberry Pi[実用]入門』技術評論社 2013
nekosan『「Raspberry Pi」でつくる電子工作』工学社 2013

Day1 RaspbianをSDカードへ書き込む

Raspberry Piのセットアップの上で最初の関門はOSイメージがフラッシュされたSDカードの作成である。手順を整理するとともに、多岐に渡る関連事項を整理してみた。



###############ハードウェアについて##################
#MacBook(母艦)
MacBook 13-inch, Aluminium, Late2008
Processor 2GHz Intel Core 2 Duo
Memory 8 GB 1067 MHz DDR3
Software OSX 10.9.1(13B42)

#外付けSDカードリーダー
ELECOM カードリーダライタ USB2.0対応 39メディア対応 シルバー MR-A39HSV(http://www.amazon.co.jp/ELECOM-%E3%82%AB%E3%83%BC%E3%83%89%E3%83%AA%E3%83%BC%E3%83%80%E3%83%A9%E3%82%A4%E3%82%BF-USB2-0%E5%AF%BE%E5%BF%9C-39%E3%83%A1%E3%83%87%E3%82%A3%E3%82%A2%E5%AF%BE%E5%BF%9C-MR-A39HSV/dp/B001QXCZRQ)


#SDHCメモリカード
Kingston SDHCカード 8GB Class10 SD10V/8GB KF-C198G-4R
http://www.amazon.co.jp/Kingston-SDHC%E3%82%AB%E3%83%BC%E3%83%89-Class10-SD10V-KF-C198G-4R/dp/B00EU7N754/ref=sr_1_2?s=computers&ie=UTF8&qid=1392366097&sr=1-2&keywords=SD10V%2F8GB
//SDカードは容量により、SD(2Gまで)、SDHC(4-32G)、SDXC(48G-)の3つの規格が存在する。また、データの読み書きの速度によりClass 2, 4, 6, 10(読み書き時のデータ転送速度が最低2,4,6,10MB/秒)の4つに分類される。
###################################################



###############SDメモリカードのチェック##################
Macに固有のコマンドであるdiskutilを使用
$ sudo diskutil list


大抵のUNIXに存在するdfコマンドを使用。ただしこの方法ではファイルシステムが表示されない。
$ df -h

sdカードである/dev/disk1を直接指定してfdiskを実行するのもよい。
$ sudo fdisk /dev/disk1

###################################################



###############Raspbianのイメージファイルのダウンロード##################

http://www.raspberrypi.org/downloadsより2014-01-07-wheezy-raspbian.zipをダウンロード。


適当なディレクトリに移動させて展開。
$ unzip 2014-01-07-wheezy-raspbian.zip

適当なサイズでファイルの大きさを表示
$ ls -lh

###################################################



###############ddコマンドを用いて、Raspbianのイメージファイルの構成を直接SDカードに第1セクタからイメージファイルの大きさの領域まで書き込む)##################
これからいよいよSDカードにRaspbianのフラッシュを行う。
まずはSDカードをアンマウントする。
SDカード(disk1)がマウントされていることの確認
$ mount 

disk1s1をアンマウント
$ sudo diskutil umount /dev/disk1s1

アンマウントされたことの確認。
$ mount


ddコマンドを持ちいてRaspbianをSDカードへフラッシュする。
bsは一度に読み書きするデータの量を指定する。デフォルトでは512byteと小さいため、1024KB(1MB)を指定して実行する
謝ったデバイスを指定すると母艦の環境が破壊されるので注意が必要。
/dev/rdisk1のようにrを頭に付けると、SDカードにアンバッファモードで書き込むため、完了が早くなる。rを付けない場合は、バッファモードとなり、書き込みが非常に遅くなるので注意。
下記のコマンドでおよそ、5分の時間を要した。
$ sudo dd if=2014-01-07-wheezy-raspbian.img of=/dev/rdisk1 bs=1m

SDカードのパーティションを確認
$ sudo diskutil list

しっかりとSDカード(dsik1)にRaspbianのパーティションが構築されていることが確認できる。

ここでトータル、2.9GB程度のRasbianを書き込んだあと、SDカードの残りの領域はどうなっているのだろうか。最後に、その点について考察をしたい。
###################################################



###############SDメモリカードの空き領域についての考察##################

diskutilの実行により以下の情報が得られた。
第1パーティション:FAT 58.7MB
第2パーティション:Linuxプライマリパーティション 2.9GB

もともとのSDカードの容量が8Gなので、OS部分を除いた残りのおよそ5GBの領域はどうなっているのだろうか。これは、質問を変えれば、「OSイメージよりも大きい容量の記憶媒体にddコマンドを用いて書き込みを行ったときに、余った部分はどうなるのか」といえる。

この問いに対する回答は恐らく、”そのまま”ではないかと考えている。
HDDを初めとした記憶媒体を管理する上でMBR(Maser Boot Record)と呼ばれる、パーティションテーブルやブートローダーを保存している領域がある。ddコマンドは、変に細かい事はせず、イメージファイルに記述された1-0の2進数のデータを記憶媒体の第0セクタ(すなわちMBRの領域)からイメージの最大容量まで順に書き込んで行くだけの機能を持っている。

書き込んだ後の余った領域が空き領域と見えるのは、各種コマンドでパーティションの構成を取得するときは、MBRのパーティションテーブルにアクセスしているからであると考えられる。
ここまでのイメージは以下のように表す事ができる。

【購入した当初のパーティション】

【Raspbianのイメージを書き込みした後】

ここで当然有効に使えていない残りの領域を使用したい願望が出てくる。これを行うには、expand_rootfsというRaspbianに備え付けのツールを用いる。
以下は、Raspberry Piを実際に起動させてから、Raspberry Piの中で行う作業である。
$ sudo raspi-config
により、raspi-configを開き、expand_rootfsを選択
結果、以下の様な構成になる。



###################################################



###############参考文献##################
Eben Upton、Gareth Halfacree著、株式会社クイープ訳『Raspberry Piユーザーガイド』インプレスジャパン 2013
Japanese Raspberry Pi Users Group『Raspberry Pi[実用]入門』技術評論社 2013
nekosan『「Raspberry Pi」でつくる電子工作』工学社 2013
###################################################