Raspberry Pi

提供: ArchWiki
移動先: 案内検索

Wikipedia より:

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

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

前書き

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

ノート: ARM アーキテクチャのサポートは公式 Arch Linux フォーラムではなく https://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+, Zero
  • ARMv7 (BCM2836): Raspberry Pi 2 (Model B+ ベース)
  • ARMv8 (BCM2837): Raspberry Pi 3

Arch Linux ARM のインストール

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

ネットワーク

ネットワークはあらかじめ設定されており、systemd-networkd によって dhcp モードでオンボードの NIC が使われます。ケーブルが接続されていれば、ほとんどのルーターで自動的に IP が取得されます。

最初から Secure Shell を使って SD カードにアクセスする場合は、Raspberry Pi をイーサネットケーブルで接続してルーターの設定を通して IP アドレスを割り当てるのが一番簡単です。デフォルトのホストネームは alarmpi です。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

ARM の Linux カーネルバージョン 4.4.x では ALSA とサウンドモジュールに大きな変更があります。最新のカーネルで alsamixer などのツールを使用するには /boot/config.txt を編集して以下の行を記述してください:

dtparam=audio=on

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

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

$ amixer cset numid=3 x

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

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

HDMI オーディオの注意

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

hdmi_drive=2

アナログ出力の注意

3.5mm のアナログ出力からの音声がかすれることがあります。以下を /boot/config.txt に追加することで問題は解決します:

audio_pwm_mode=2

ビデオ

CPU/GPU のメモリ分割

SoC に搭載されている CPU と GPU のメモリの振り分けは boot/config.txt 内の gpu_mem パラメータで設定できます。GPU から利用できるメモリの量を MB 単位で指定してください (最低 16 MB、デフォルトは 64 MB)。残りは全て ARM CPU から使用されます。

HDMI / アナログ TV 出力

デフォルト設定では、Raspberry Pi は HDMI モニターが接続されているときは HDMI を使うようになっています。接続されていない場合はアナログ TV 出力 (コンポジット出力あるいは RCA) が使われます。

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

もしくは、TV やモニターに「画面に合わせる」オプションが存在して、オーバースキャンを無効化したい場合:

disable_overscan=1

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

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

アナログ TV 出力の注意事項

Raspberry Pi 1 モデル B+ と Raspberry Pi 2 モデル B から、コンポジットビデオ端子はなくなって、代わりに 3.5mm の動画/音声ジャックからコンポジット信号を出力するようになっています。RCA ケーブルによっては赤や白の音声端子で動画を接続する Raspberry Pi の規格に対応していない場合があります [1]

X.org ドライバー

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

# pacman -S xf86-video-fbdev

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

温度

温度センサーは raspberrypi-firmware パッケージにあるユーティリティで使うことができます。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 の電圧

ウォッチドッグ

BCM2708 にはハードウェアウォッチドッグが搭載されており bcm2708_wdog カーネルモジュールを有効にすることで利用できます。

適切に扱うには watchdog デーモンをインストールして設定する必要があります (/etc/watchdog.conf 内の "watchdog-device" 行をアンコメントしてください)。それからデーモンを有効化してください。

Raspberry Pi 2 の場合は bcm2709_wdog モジュールを、Raspberry Pi 3 の場合は bcm2835_wdt モジュールを使用してください。

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

monitorixAUR は v3.2.0 から RPi をサポートしています (/etc/monitorix/monitorix.confraspberrypi = y を設定してください)。温度・電圧・周波数などが記録されます。スクリーンショットはここ にあります。

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

/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 カードのパフォーマンスを最大化するヒント

システムのレスポンスは SD メディアの速度に大きな影響を受けます。特にシステムのアップデートなどディスク I/O に関する処理を行っている際はそれが際立つでしょう。pacman がファイルシステムにファイルを書き出すときに 頻繁に停止する ような場合、RPi や RPi2 の接続バスが足を引っ張っているというよりは、SD (あるいはマイクロ SD) カードがボトルネックとなっている可能性があります。詳しくはベンチマーク#フラッシュメディアを参照。

一般的なパフォーマンスを上げる方法についてはパフォーマンスの最大化ソリッドステートドライブ#SSD の読み書きを最小化するヒントを見て下さい。

起動時に fsck を有効にする

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

シリアルコンソール

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

loglevel=5
ノート: Pi3 でブートメッセージを表示するには enable_uart=1/boot/cmdline.txt に追加する必要があります。

速度を 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

そして PC から接続:

# screen /dev/ttyUSB0 38400

Raspberry Pi カメラモジュール

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

$ /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 パッケージがインストールされており、bcm2835-rng (カーネル 4.4.7 から Raspberry Pi 2 と Raspberry Pi 3 では bcm2835_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) に取り入れられるようになります。エントロピーを確認するには:

# cat /proc/sys/kernel/random/entropy_avail
ノート: 古いイメージからカーネルを更新すると旧式の bcm2708-rng を見つけられず systemd-modules-load.service の起動に失敗していることがあります。その場合には /etc/modules-load.d/raspberrypi.conf を設定し直し、 systemd-modules-load.service を再起動すると解決します (こちら を参照)。

I/O ピン

GPIO

Python から GPIO ピンを使えるようにするには RPi.GPIO ライブラリを使用します。python-raspberry-gpioAUR パッケージをインストールしてください。

SPI

/dev/spidev* デバイスを有効にするには、以下の行をアンコメントしてください:

/boot/config.txt
device_tree_param=spi=on

I2C

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

/boot/config.txt に以下を追加することで i2c ハードウェアを有効にするようにブートローダーを設定します:

dtparam=i2c_arm=on

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

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

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

i2cdetect -y 0
ノート: I2C0 ではなく I2C1 ポートを使用する場合、i2cdetect -y 1 を実行して、以下のコマンドで使われている i2c-0i2c-1 に置き換える必要があります。

そしてデバイスを初期化するように 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

RPi でのコンパイル

RPi 上でのコンパイルは非常に低速です。ネットワーク上に他のノードが存在する場合 Distcc を使うことでコンパイル時間を大幅に短縮できます。x86_64 や i686 のマシンを使っている場合、Distcc#Arch ARM に既存のマシンを活用して distcc をセットアップする方法が書かれています。

QEMU chroot

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

ノート: 2016年1月現在、ARM の QEMU で make が動作しないため、以下の方法でパッケージをビルドすることはできません。ARM パッケージのビルドが必要な場合は Arch Linux ARM ウェブサイトのガイド に従ってクロスコンパイラをビルドしてください。

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

ARM から x86 への変換が有効かどうか確認:

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

ARM から x86 への変換が有効でない場合、update-binfmts を使って有効にしてください:

# update-binfmts --enable 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 してください。qemu-arm-static コマンドは chroot の中から呼び出す必要があります:

# chroot /mnt/arch /usr/bin/qemu-arm-static /bin/bash

参照

  • Raspberry Pi - 公式ウェブサイト
  • RPi Config - ボンネットの下の設定に関連する情報がまとまっています
  • RPi vcgencmd usage - ファームウェアコマンドの vcgencmd の概要