Raspberry Pi

提供: ArchWiki
2015年3月9日 (月) 13:02時点におけるKusakata (トーク | 投稿記録)による版
ナビゲーションに移動 検索に移動

Wikipedia より:

"Raspberry Pi はクレジットカードサイズのシングルボードコンピュータのシリーズである。イギリスのラズベリーパイ財団によって開発されており、学校で基本的なコンピュータ科学の教育を促進することを意図している。"

オリジナルモデルは Broadcom SoC BCM2835 (ARM11 マイクロアーキテクチャ) を使用していましたが、ラズベリーパイ財団は最近になってニューモデルの "Raspberry Pi 2" をリリースしました。RasPi 2 には BCM2836 SoC (クアッドコアの ARM Cortex A7 アーキテクチャ) が搭載されています。

前書き

この記事は完全なセットアップガイドではなく、読者が既に Arch システムを構築していることを前提としています。ユーザーの作成やシステムの管理など、基本的な作業の方法がよくわからない場合、Arch 初心者はビギナーズガイドを読むことが推奨されています。

ノート: ARM アーキテクチャのサポートは公式 Arch Linux フォーラムではなく http://archlinuxarm.org で提供されています。ARM 固有の問題に関する投稿は Arch Linux ディストリビューションのサポートオンリーポリシーに従って直ちにクローズされます。

システム構成

Raspberry Pi は ARM ベースのデバイスであり、ARM アーキテクチャ用にコンパイルされたバイナリが必要になります。ARM 用のバイナリは Arch Linux を ARM ベースのデバイスに移植している Arch Linux ARM プロジェクト によって提供されています。ALARM プロジェクトのウェブサイトには独自のコミュニティとフォーラムがあります。オリジナルの Arch のフォーラムでは ARM に関連する問題はサポートされていません。Raspberry Pi 2 が登場したことで、デバイスのアーキテクチャによって必要なパッケージは2つに分かれています:

  • ARMv6 (BCM2835): Raspberry Pi Model A, A+, B, B+
  • ARMv7 (BCM2836): Raspberry Pi 2 (Model B+ ベース)

Arch Linux ARM のインストール

Arch Linux ARM Pi のドキュメント または Arch Linux ARM Pi2 のドキュメント を見てください。

ネットワーク

新規インストールには設定済みの DHCP クライアントデーモン (dhcpcd) が付属しているため、ほとんどのルーターでは自動的に LAN に接続されます。

最初から Secure Shell を使って SD カードにアクセスする場合は、Raspberry Pi をイーサネットケーブルで接続してルーターの設定を通して IP アドレスを割り当てるのが一番簡単です。root で直接アクセスすることができます (パスワード: root)。まず初めにパスワードを変更することを強く推奨します。任意で SSH 鍵も設定してください。

Ethernet を使わずに WLAN を設定

無線インターネット接続を確立する必要がある場合、いくつかパッケージを追加でダウンロードして SD カードに保存する必要があります。netctl を使用する場合、最低でも WPA supplicant と依存パッケージの libnl が必要になります。また、dialog と依存パッケージの ncurses もインストールしておいたほうが便利でしょう。

まとめると以下を実行する必要があります:

  • 他のコンピュータから SD カードにパッケージをダウンロード
  • Raspberry Pi にパッケージをインストール・設定

必要なパッケージは全て Arch Linux ARM の公式ウェブサイト で見つけることができ、Arch Linux ARM のリポジトリ からダウンロードできます。

その後、Raspberry Pi を接続して立ち上げて、モニター/キーボードを使うかシリアルコンソールでログインします。そして、パッケージをオフラインインストールしてください。パッケージの依存パッケージが欠けている場合は、依存パッケージもダウンロードしてインストールしてください。

パッケージをインストールしたら、インターネットに接続してビギナーズガイドのこのセクションに書かれているように設定します。

オーディオ

ノート: 必須モジュール snd-bcm2835 はデフォルトで自動ロードされます。

alsa-utils, alsa-firmware, alsa-lib, alsa-plugins パッケージをインストールしてください:

# pacman -S alsa-utils alsa-firmware alsa-lib alsa-plugins

任意で、alsamixer を使ってデフォルトのボリュームを調整してください。唯一の音源 "PCM" がミュートされていないことを確認してください (ミュートされている場合は MM と表示されます、ミュートを解除するには M を押して下さい)。

音源の出力を選択するには:

$ amixer cset numid=3 x

x は以下のどれかになります:

  • 0 は自動
  • 1 はアナログ出力
  • 3 は HDMI

HDMI オーディオの注意

アプリケーションによっては音声を HDMI で出力するために /boot/config.txt に設定が必要です:

hdmi_drive=2

ビデオ

HDMI / アナログ TV 出力

HDMI やアナログ TV 出力のオン・オフを切り替えるには、次を見て下さい:

/opt/vc/bin/tvservice

-s パラメータでディスプレイの状態を確認し、-o パラメータでディスプレイをオフに、-p パラメータで優先設定を使って HDMI をオンにします。

オーバースキャン・アンダースキャンを適切に修正するには調整が必要で、多くの設定がある boot/config.txt で簡単に行うことができます。修正するには、コメントの指示に従って適切な行の設定をアンコメントしてください:

# 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=8
overscan_top=-16
overscan_bottom=-16

アナログビデオ出力を使いたいユーザーは NTSC 以外の出力のオプションを含んでいるこの設定ファイルを見て下さい。

新しい設定を適用するには再起動が必要です。

X.org ドライバー

Raspberry Pi の X.org ドライバーは xf86-video-fbdev パッケージでインストールできます:

# pacman -S xf86-video-fbdev

オンボードのハードウェアセンサー

温度

温度センサーは raspberrypi-firmware-tools パッケージにあるユーティリティで使うことができます。RPi は BCM2835 SoC (CPU/GPU) 上にセンサーを搭載しています:

$ /opt/vc/bin/vcgencmd measure_temp
temp=49.8'C

また、ファイルシステムから読み取ることもできます:

$ cat /sys/class/thermal/thermal_zone0/temp
49768

人間が読めるように出力するには:

$ awk '{printf "%3.1f°C\n", $1/1000}' /sys/class/thermal/thermal_zone0/temp
54.1°C

電圧

同じように /opt/vc/bin/vcgencmd で4つの異なる電圧をチェックすることができます:

$ /opt/vc/bin/vcgencmd measure_volts <id>

<id> は以下のどれかに置き換えてください:

  • core はコアの電圧
  • sdram_c は sdram Core の電圧
  • sdram_i は sdram I/O の電圧
  • sdram_p は sdram PHY の電圧

軽量なモニタリングスイート

monitorixAUR は v3.2.0 から RPi をサポートしています。スクリーンショットはここ にあります。

オーバークロック / アンダークロック

/boot/config.txt を編集することで RPi をオーバークロックさせることができます、例:

arm_freq=800
arm_freq_min=100
core_freq=300
core_freq_min=75
sdram_freq=400
over_voltage=0

*_min の行は任意で、それぞれの設定の最低値を定義します。システムの負担が低い時は、指定した値まで下がります。オプションの詳しい説明や例は elinux の Overclocking 記事を見て下さい。

新しい設定を適用するには再起動が必要です。

CPU のオーバークロック設定は、負担が高い時にガバナーが CPU の周波数を上げる場合にだけ適用されます。次のコマンドで現在の CPU の周波数を確認できます:

$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq

スケーリングガバナーの詳細は CPU 周波数スケーリングを見てください。

ヒント: 以下のスクリプトを実行すると RPi に設定された全ての周波数が表示されます:
#/bin/bash
for src in arm core h264 isp v3d uart pwm emmc pixel vec hdmi dpi ; do
    echo -e "$src:\t$(/opt/vc/bin/vcgencmd  measure_clock $src)"
done

SD カードのパフォーマンスを最大化するヒント

一般的なパフォーマンスを上げる方法についてはパフォーマンスの最大化を見て下さい。

起動時に fsck を有効にする

fsck#ブート時のチェックを見てください。カーネルパラメータは /boot/cmdline.txt で指定するようにしてください。

シリアルコンソール

ブートメッセージを見るには、デフォルトの /boot/cmdline.txt を編集して、loglevel5 に変更してください:

loglevel=5

速度を 115200 から 38400 に変える:

console=ttyAMA0,38400 kgdboc=ttyAMA0,38400

getty サービスを起動する:

# systemctl start getty@ttyAMA0

ブート時に有効にする:

# systemctl enable getty@ttyAMA0.service

適当な service リンクを作成する:

# ln -s /usr/lib/systemd/system/serial-getty@.service /etc/systemd/system/getty.target.wants/serial-getty@ttyAMA0.service

そして接続 :)

# screen /dev/ttyUSB0 38400

Raspberry Pi カメラモジュール

カメラモジュールのコマンドは raspberrypi-firmware-tools パッケージに含まれています - このパッケージはデフォルトでインストールされています。以下のコマンドで使うことができます:

$ /opt/vc/bin/raspistill
$ /opt/vc/bin/raspivid

/boot/config.txt に以下を追加する必要があります:

gpu_mem=128
start_file=start_x.elf
fixup_file=fixup_x.dat

LED をオフにする設定 (任意):

disable_camera_led=1

以下のエラーが表示される場合:

mmal: mmal_vc_component_enable: failed to enable component: ENOSPC
mmal: camera component couldn't be enabled
mmal: main: Failed to create camera component
mmal: Failed to run camera app. Please check for firmware updates

/boot/config.txt に以下の値を設定してみてください:

cma_lwm=
cma_hwm=
cma_offline_start=

以下のエラーが表示される場合:

mmal: mmal_vc_component_create: failed to create component 'vc.ril.camera' (1:ENOMEM)
mmal: mmal_component_create_core: could not create component 'vc.ril.camera' (1)
mmal: Failed to create camera component
mmal: main: Failed to create camera component
mmal: Only 64M of gpu_mem is configured. Try running "sudo raspi-config" and ensure that "memory_split" has a value of 128 or greater

/etc/modprobe.d/blacklist.conf に以下の行を追加してください:

blacklist i2c_bcm2708

(/dev/video0 を使用する) 標準的なアプリケーションを使うには V4L2 ドライバーをロードする必要があります。以下のように自動ロードファイルを作成することで起動時に自動的にロードさせることが可能です:

/etc/modules-load.d/rpi-camera.conf
bcm2835-v4l2

ハードウェア乱数生成器

Raspberry Pi 用の Arch Linux ARM には rng-tools パッケージがインストールされており、bcm2708-rng が起動時にロードされるように設定されています (こちら を参照) が、Hardware RNG Entropy Gatherer Daemon (rngd) にハードウェア乱数生成器の場所を教えてやる必要があります。

/etc/conf.d/rngd を編集することで設定します:

RNGD_OPTS="-o /dev/random -r /dev/hwrng"

設定したら rngd デーモンを再起動してください:

# systemctl restart rngd

この設定で、ハードウェア乱数生成器からのデータがカーネルのエントロピープール (/dev/random) に取り入れられるようになります。

GPIO

Python

Python から GPIO ピンを使えるようにするために、RPi.GPIO ライブラリを使用することができます。AUR から python-raspberry-gpioAURpython2-raspberry-gpioAUR のどちらかをインストールしてください。

I2C

i2c-toolslm_sensors パッケージをインストールしてください。

i2c-dev モジュールを起動時にロードするように設定:

/etc/modules-load.d/raspberrypi.conf
i2c-dev

Raspberry Pi を再起動してから次のコマンドを実行してハードウェアアドレスを取得:

i2cdetect -y 0

そしてデバイスを初期化するように Linux を設定します。以下のコマンドのハードウェアアドレスは先のコマンドで取得したアドレスに置き換えてください ('0x' を前に付けます、例: 0x48)。デバイス名は自由に決めて下さい:

echo <devicename> <hardware address> >/sys/class/i2c-adapter/i2c-0/new_device

dmesg コマンドを使ってカーネルメッセージを確認すると、以下のような新しいエントリが追加されているはずです:

i2c-0: new_device: Instantiated device ds1621 at 0x48

最後に、センサーの出力を読み出す:

sensors

QEMU chroot

場合によっては Raspberry Pi を動かすよりもディスクイメージを直接操作したほうが楽だということもあるでしょう。RPi の root パーティションが含まれている SD カードをマウントして、そこに chroot することで直接操作することができます。chroot からは、pacman を実行してパッケージをインストールしたり、巨大なライブラリをコンパイルすることが可能です。実行可能ファイルは ARM アーキテクチャ用のものなので、QEMU を使って x86 への変換を行う必要があります。

AUR から binfmt-supportAURqemu-user-staticAUR をインストールしてください。

ARM から x86 への変換を有効にします:

# update-binfmts --importdir /var/lib/binfmts/ --import
# update-binfmts --display qemu-arm

SD カードを mnt/ にマウントします (デバイス名は適宜置き換えてください)。

# mkdir mnt
# mount /dev/mmcblk0p2 mnt

(ARM からの変換を処理する) QEMU の実行可能ファイルを SD カードの root にコピー:

# cp /usr/bin/qemu-arm-static mnt/usr/bin

最後に Change Root#Change root に書かれているように SD カードの root に chroot してください。

参照

  • RPi Config - ボンネットの下の設定に関連する情報がまとまっています
  • RPi vcgencmd usage - ファームウェアコマンドの vcgencmd の概要
  • Arch Linux ARM on Raspberry PI - RPi で Arch Linux を動かす時のヒントが書かれている FAQ スタイルのサイト