「Raspberry Pi」の版間の差分
Kusakata.bot (トーク | 投稿記録) (Pkg/AUR テンプレートの更新) |
Kusakata.bot (トーク | 投稿記録) (Pkg/AUR テンプレートの更新) |
||
373行目: | 373行目: | ||
64ビットの Raspberry Pi では {{ic|aarch64}} を使うことができます。他のモデルでは {{ic|arm}} を使ってください。 |
64ビットの Raspberry Pi では {{ic|aarch64}} を使うことができます。他のモデルでは {{ic|arm}} を使ってください。 |
||
− | [[AUR]] から {{AUR|binfmt-support |
+ | [[AUR]] から {{AUR|binfmt-support}} と {{AUR|qemu-user-static}} をインストールしてください。 |
そして {{ic|binfmt-support}} サービスを起動・有効化してください: |
そして {{ic|binfmt-support}} サービスを起動・有効化してください: |
2019年2月21日 (木) 23:24時点における版
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 初心者は一般的な推奨事項を読むことが推奨されています。
システム構成
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, Zero W
- ARMv7 (BCM2836): Raspberry Pi 2 (Model B+ ベース)
- ARMv8 (BCM2837): Raspberry Pi 3
Arch Linux ARM のインストール
Raspberry Pi
Arch Linux ARM Pi のドキュメント を見てください。
Raspberry Pi 2
Arch Linux ARM Pi2 のドキュメント を見てください。
Raspberry Pi 3
Arch Linux ARM Pi3 のドキュメント を見てください。
ARMv7 インストール
Raspberry Pi 2 以前でビルドされたソフトウェア、特にベンダーライブラリを必要とするソフトウェアと互換性を持っています。
以下のコマンドで使われる sdX
は実際にコンピュータで認識された SD カードのデバイス名に置き換えてください。
fdisk を起動して SD カードのパーティショニングを開始:
# fdisk /dev/sdX
fdisk プロンプトが表示されたら、古いパーティションを削除して新しいパーティションを作成します:
- o を押してください。ドライブ上の全てのパーティションが消去されます。
- p を押してパーティションを確認してください。パーティションがひとつも存在しないはずです。
- n を押してから、p でプライマリパーティションを選択、1 でドライブの一番最初のパーティションを選択し、最初のセクタは ENTER でデフォルトに、最後のセクタは +100M と入力します。
- t を押してから c を押して最初のパーティションのタイプを W95 FAT32 (LBA) に設定してください。
- n を押してから、p でプライマリパーティションを選択、2 でドライブの二番目のパーティションを選択し、最初・最後のセクタは ENTER を2回押してデフォルトに設定します。
- w を押してパーティションテーブルに書き込んで終了してください。
FAT ファイルシステムを作成・マウント:
# mkfs.vfat /dev/sdX1 # mkdir boot # mount /dev/sdX1 boot
ext4 ファイルシステムを作成・マウント:
# mkfs.ext4 /dev/sdX2 # mkdir root # mount /dev/sdX2 root
root ファイルシステムをダウンロードして展開 (sudo ではなく root ユーザーで実行してください):
# wget http://os.archlinuxarm.org/os/ArchLinuxARM-rpi-2-latest.tar.gz # bsdtar -xpf ArchLinuxARM-rpi-2-latest.tar.gz -C root # sync
ブートファイルを一番目のパーティションに移動:
# mv root/boot/* boot
パーティションをアンマウント:
# umount boot root
Rasberry Pi に SD カードを挿入して、有線を接続し、5V 電力を供給してください。
シリアルコンソールあるいは SSH を使ってルーターからボードに割り当てられた IP アドレスに接続します。デフォルトのユーザー名は alarm でパスワードは同じく alarm です。デフォルトの root パスワードは root です。
AArch64 インストール
メインラインカーネルと U-Boot を使ってインストールすることができます。ベンダーが提供しているライブラリや拡張、ソフトウェアのサポートはありません。ボードに搭載されているハードウェアの一部が機能しなかったり、正しく動かなかったりすることがあります。
インストール手順は上記と同じですが、次の tarball を使ってください: http://os.archlinuxarm.org/os/ArchLinuxARM-rpi-3-latest.tar.gz
ネットワーク
ネットワークはあらかじめ設定されており、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 を接続して立ち上げて、モニター/キーボードを使うかシリアルコンソールでログインします。そして、パッケージをオフラインインストールしてください。パッケージの依存パッケージが欠けている場合は、依存パッケージもダウンロードしてインストールしてください。
ワイヤレス設定も読んでください。
オーディオ
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.conf
に raspberrypi = y
を設定してください)。温度・電圧・周波数などが記録されます。スクリーンショットはここ にあります。
オーバークロック / アンダークロック
/boot/config.txt
を編集することで RPi をオーバークロックさせることができます、RPi 1 の設定例:
arm_freq=800 arm_freq_min=100 core_freq=300 core_freq_min=75 sdram_freq=400 over_voltage=0
RPi 3 の設定例:
arm_freq=1350 core_freq=500 sdram_freq=500 # test required over_voltage=4
*_min
の行は任意で、それぞれの設定の最低値を定義します。システムの負担が低い時は、指定した値まで下がります。オプションの詳しい説明や例は elinux の Overclocking 記事を見て下さい。
新しい設定を適用するには再起動が必要です。
CPU のオーバークロック設定は、負担が高い時にガバナーが CPU の周波数を上げる場合にだけ適用されます。次のコマンドで現在の CPU の周波数を確認できます:
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
スケーリングガバナーの詳細は CPU 周波数スケーリングを見てください。
SD カードのパフォーマンスを最大化するヒント
システムのレスポンスは SD メディアの速度に大きな影響を受けます。特にシステムのアップデートなどディスク I/O に関する処理を行っている際はそれが際立つでしょう。pacman がファイルシステムにファイルを書き出すときに 頻繁に停止する ような場合、RPi や RPi2 の接続バスが足を引っ張っているというよりは、SD (あるいはマイクロ SD) カードがボトルネックとなっている可能性があります。詳しくはベンチマーク#フラッシュメディアを参照。UHS-I U3 以上の "Pro" クラスのカードを使うことを推奨します。
一般的なパフォーマンスを上げる方法についてはパフォーマンスの最大化やソリッドステートドライブ#SSD の読み書きを最小化するヒントを見て下さい。
起動時に fsck を有効にする
fsck#ブート時のチェックを見てください。カーネルパラメータは /boot/config.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
そして 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
デフォルトでは V4L2 ドライバーを使って録画できる動画の解像度は 1280x720 が最大です。それ以上にしようとすると動画が 4 fps 以下にまで落ち込みます。制限を取り払いたい場合、以下のオプションを追加してください:
/etc/modprobe.d/rpi-camera.conf
options bcm2835-v4l2 max_video_width=3240 max_video_height=2464
ハードウェア乱数生成器
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
I/O ピン
GPIO
Python から GPIO ピンを使えるようにするには RPi.GPIO ライブラリを使用します。python-raspberry-gpioAUR パッケージをインストールしてください。
SPI
/dev/spidev*
デバイスを有効にするには、以下の行をアンコメントしてください:
/boot/config.txt
device_tree_param=spi=on
I2C
i2c-tools パッケージをインストールしてください。
/boot/config.txt
に以下を追加することで i2c ハードウェアを有効にするようにブートローダーを設定します:
dtparam=i2c_arm=on
i2c-dev
と i2c-bcm2708
モジュールを起動時にロードするように設定:
/etc/modules-load.d/raspberrypi.conf
i2c-dev i2c-bcm2708
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
lm_sensors などのプログラムを使ってセンサーの出力を読み出すことができます。
1-Wire
1-Wire インターフェイスを有効にするには /boot/config.txt
に以下の行を追加して再起動してください:
dtoverlay=w1-gpio
RPi でのコンパイル
RPi 上でのコンパイルは非常に低速です。ネットワーク上に他のノードが存在する場合 Distcc を使うことでコンパイル時間を大幅に短縮できます。x86_64 や i686 のマシンを使っている場合、Distcc#Arch Linux ARM に既存のマシンを活用して distcc をセットアップする方法が書かれています。
QEMU chroot
場合によっては Raspberry Pi を動かすよりもディスクイメージを直接操作したほうが楽だということもあるでしょう。RPi の root パーティションが含まれている SD カードをマウントして、そこに chroot することで直接操作することができます。chroot からは、pacman を実行してパッケージをインストールしたり、巨大なライブラリをコンパイルすることが可能です。実行可能ファイルは ARM アーキテクチャ用のものなので、QEMU を使って x86 への変換を行う必要があります。
64ビットの Raspberry Pi では aarch64
を使うことができます。他のモデルでは arm
を使ってください。
AUR から binfmt-supportAUR と qemu-user-staticAUR をインストールしてください。
そして binfmt-support
サービスを起動・有効化してください:
# systemctl enable binfmt-support # systemctl start binfmt-support
qemu-user-staticAUR はコンパイルしたプログラムを他のアーキテクチャから実行するのに必要となります。qemu-arch-extra と似たような機能ですが、chroot で使うには "static" なバージョンが必要です。例:
qemu-arm-static path_to_sdcard/usr/bin/ls qemu-aarch64-static path_to_sdcard/usr/bin/ls
上記のコマンドで32ビットの ARM と64ビットの ARM 用にコンパイルされた ls
を実行できます。ホスト環境に存在しないライブラリを使うため、chroot を使わないと機能しません。
qemu-user-staticAUR は ARM の実行ファイルに自動的に qemu-arm-static
または qemu-aarch64-static
を前に付けます。/var/lib/binfmts/qemu-arm
や qemu-user-static
の PKGBUILD などを見てください。
ARM から x86 への変換が有効かどうか確認:
# update-binfmts --display qemu-arm # update-binfmts --display qemu-aarch64
ARM から x86 への変換が有効でない場合、update-binfmts を使って有効にしてください:
# update-binfmts --enable qemu-arm # update-binfmts --enable qemu-aarch64
SD カードを mnt/
にマウントします (デバイス名は適宜置き換えてください)。
# mkdir mnt # mount /dev/mmcblk0p2 mnt
必要であればブートパーティションをマウントしてください (デバイス名は適当な名前に置き換えてください):
# mount /dev/mmcblk0p1 mnt/boot
(ARM からの変換を処理する) QEMU の実行可能ファイルを SD カードにコピーしてください:
# cp /usr/bin/qemu-arm-static /usr/bin/qemu-aarch64-static mnt/usr/bin
最後に Change Root#chroot を使うに書かれているように SD カードの root に chroot してください:
# chroot mnt/ /bin/bash
arch-install-scripts に含まれている arch-chroot
を使うこともできます (ネットワークのサポートが含まれています):
# arch-chroot mnt/ /bin/bash
参照
- Raspberry Pi - 公式ウェブサイト
- RPi Config - ボンネットの下の設定に関連する情報がまとまっています
- RPi vcgencmd usage - ファームウェアコマンドの vcgencmd の概要