Raspberry Pi
Wikipedia より:
- "Raspberry Pi はクレジットカードサイズのシングルボードコンピュータのシリーズである。イギリスのラズベリーパイ財団によって開発されており、学校で基本的なコンピュータ科学の教育を促進することを意図している。"
オリジナルモデルは Broadcom SoC BCM2835 (ARM11 マイクロアーキテクチャ) を使用していましたが、ラズベリーパイ財団は最近になってニューモデルの "Raspberry Pi 2" をリリースしました。RasPi 2 には BCM2836 SoC (クアッドコアの ARM Cortex A7 アーキテクチャ) が搭載されています。
目次
前書き
この記事は完全なセットアップガイドではなく、読者が既に Arch システムを構築していることを前提としています。ユーザーの作成やシステムの管理など、基本的な作業の方法がよくわからない場合、Arch 初心者はビギナーズガイドを読むことが推奨されています。
システム構成
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 を接続して立ち上げて、モニター/キーボードを使うかシリアルコンソールでログインします。そして、パッケージをオフラインインストールしてください。パッケージの依存パッケージが欠けている場合は、依存パッケージもダウンロードしてインストールしてください。
パッケージをインストールしたら、インターネットに接続してビギナーズガイドのこのセクションに書かれているように設定します。
オーディオ
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 周波数スケーリングを見てください。
SD カードのパフォーマンスを最大化するヒント
一般的なパフォーマンスを上げる方法についてはパフォーマンスの最大化を見て下さい。
起動時に fsck を有効にする
fsck#ブート時のチェックを見てください。カーネルパラメータは /boot/cmdline.txt
で指定するようにしてください。
シリアルコンソール
ブートメッセージを見るには、デフォルトの /boot/cmdline.txt
を編集して、loglevel
を 5
に変更してください:
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-gpioAUR か python2-raspberry-gpioAUR のどちらかをインストールしてください。
I2C
i2c-tools と lm_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-supportAUR と qemu-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 スタイルのサイト