Difference between revisions of "Raspberry Pi"

From ArchWiki
Jump to: navigation, search
m
m (add fix to an error with camera)
(30 intermediate revisions by 16 users not shown)
Line 1: Line 1:
[[Category:Getting and installing Arch]]
+
[[Category:ARM architecture]]
{{Article summary start}}
+
[[cs:Raspberry Pi]]
{{Article summary text|Raspberry Pi is a minimalist computer built for the [[Wikipedia:ARMv6|ARMv6 architecture]]. [http://www.raspberrypi.org/ More information about this project] and [http://uk.farnell.com/raspberry-pi technical specification].}}
+
[[ru:Raspberry Pi]]
{{Article summary heading|Related}}
+
Raspberry Pi (RPi) is a minimalist computer built for the [[Wikipedia:ARMv6|ARMv6 architecture]]. [http://www.raspberrypi.org/ More information about this project] and [http://uk.farnell.com/raspberry-pi technical specification].
{{Article summary wiki|Beginners%27_Guide}} - This article is not meant to be an exhaustive setup guide and assumes that the reader has setup an Arch system before. Arch newbies are encouraged to read the Beginners'_Guide if unsure how to preform standard tasks such as creating users, managing the system, etc.
+
[http://elinux.org/RPiconfig RPi Config] - Excellent source of info relating to under-the-hood tweaks.
+
 
+
[http://elinux.org/RPI_vcgencmd_usage RPi vcgencmd usage] - Overview of firmware command vcgencmd.
+
{{Article summary end}}
+
  
 
== Article Preface ==
 
== Article Preface ==
{{Note|Support for the ARM architecture is provided on http://archlinuxarm.org/ }}
+
This article is not meant to be an exhaustive setup guide and assumes that the reader has setup an Arch system before.  Arch newbies are encouraged to read the [[Beginners' guide]] if unsure how to preform standard tasks such as creating users, managing the system, etc.
{{Note|Posts to the official Arch Linux Forum related to ARM specific issues will be promptly closed.}}
+
 
 +
{{Note|Support for the ARM architecture is provided on http://archlinuxarm.org not through posts to the official Arch Linux Forum.  Any posts related to ARM specific issues will be promptly closed per the [https://wiki.archlinux.org/index.php/Forum_Etiquette#Arch_Linux_Distribution_Support_ONLY Arch Linux Distribution Support ONLY] policy.}}
  
 
== Installing Arch Linux ARM ==
 
== Installing Arch Linux ARM ==
  
See the [http://archlinuxarm.org/platforms/armv6/raspberry-pi#qt-platform_tabs-ui-tabs2 archlinuxarm documentation].
+
See the [http://archlinuxarm.org/platforms/armv6/raspberry-pi Arch Linux ARM documentation].
  
 
== Audio ==
 
== Audio ==
{{Note| The requisite module '''snd-bcm2835''' should be autoloaded by default.}}
+
{{Note|The requisite module {{ic|snd-bcm2835}} should be autoloaded by default.}}
  
Install the needed packages:
+
Install the '''alsa-utils''', '''alsa-firmware''', '''alsa-lib''' and '''alsa-plugins''' packages:
  pacman -S alsa-utils alsa-firmware alsa-lib alsa-plugins
+
  # pacman -S alsa-utils alsa-firmware alsa-lib alsa-plugins
  
Optionally adjust the default volume using `alsamixer` and ensure that the sole source "PCM" is not muted (denoted by double MM if muted).
+
Optionally adjust the default volume using {{ic|alsamixer}} and ensure that the sole source "PCM" is not muted (denoted by {{ic|MM}} if muted, press {{ic|M}} to unmute).
  
 
Select an audio source for output:
 
Select an audio source for output:
  amixer cset numid=3 x
+
  $ amixer cset numid=3 ''x''
  
Where 'x' corresponds to:
+
Where {{ic|''x''}} corresponds to:
 
*0 for Auto
 
*0 for Auto
*1 for Headphones
+
*1 for Analog out
 
*3 for HDMI
 
*3 for HDMI
  
Line 36: Line 32:
 
Some applications require a setting in {{ic|/boot/config.txt}} to force audio over HDMI:
 
Some applications require a setting in {{ic|/boot/config.txt}} to force audio over HDMI:
 
  hdmi_drive=2
 
  hdmi_drive=2
 +
 +
== Video ==
 +
 +
=== HDMI / Analog TV-Out ===
 +
To turn the [[HDMI]] or analog TV-Out on or off, have a look at
 +
 +
/opt/vc/bin/tvservice
 +
 +
Use the ''-s'' parameter to check the status of your display, the ''-o'' parameter to turn your display off and ''-p'' parameter to power on HDMI with preferred settings.
 +
 +
Adjustments are likely required to correct proper overscan/underscan and are easily achieved in {{ic|boot/config.txt}} in which many tweaks are set.  To fix, simply uncomment the corresponding lines and setup per the commented instructions:
 +
 +
# 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
 +
 +
Users wishing to use the analog video out should consult [https://raw.github.com/Evilpaul/RPi-config/master/config.txt this] config file which contains options for non-NTSC outputs.
 +
 +
A reboot is needed for new settings to take effect.
 +
 +
=== X.org driver ===
 +
 +
The X.org driver for Raspberry Pi can be installed with the '''xf86-video-fbdev''' package:
 +
# pacman -S xf86-video-fbdev
  
 
== Onboard Hardware Sensors ==
 
== Onboard Hardware Sensors ==
 
=== Temperature ===
 
=== Temperature ===
Temperatures sensors for the board itself are including as part of the '''raspberrypi-firmware-tools''' package.  the RPi offers a sensor of the BCM2835 SoC (CPU/GPU):
+
Temperatures sensors can be queried with utils in the '''raspberrypi-firmware-tools''' package.  The RPi offers a sensor on the BCM2835 SoC (CPU/GPU):
  
/opt/vc/bin/vcgencmd measure_temp
+
{{hc|$ /opt/vc/bin/vcgencmd measure_temp|2=
temp=49.8'C
+
temp=49.8'C
 +
}}
  
Alternatively, simply read from the filesystem:
+
Alternatively, simply read from the file system:
% cat /sys/class/thermal/thermal_zone0/temp              
+
{{hc|$ cat /sys/class/thermal/thermal_zone0/temp|2=
49768
+
49768
 +
}}
 +
 
 +
For human readable output:
 +
{{hc|awk '{printf "%3.1f°C\n", $1/1000}' /sys/class/thermal/thermal_zone0/temp|2=
 +
54.1°C
 +
}}
  
 
=== Voltage ===
 
=== Voltage ===
 
Four different voltages can be monitored via {{ic|/opt/vc/bin/vcgencmd}} as well:
 
Four different voltages can be monitored via {{ic|/opt/vc/bin/vcgencmd}} as well:
  
  % /opt/vc/bin/vcgencmd measure_volts <id>
+
  $ /opt/vc/bin/vcgencmd measure_volts ''<id>''
  
 +
Where {{ic|''<id>''}} is:
 
*core for core voltage
 
*core for core voltage
 
*sdram_c for sdram Core voltage
 
*sdram_c for sdram Core voltage
 
*sdram_i for sdram I/O voltage
 
*sdram_i for sdram I/O voltage
 
*sdram_p for sdram PHY voltage
 
*sdram_p for sdram PHY voltage
 +
 +
=== Lightweight Monitoring Suite ===
 +
{{AUR|monitorix}} has specific support for the RPi since v3.2.0.  Screenshots available [http://www.monitorix.org/screenshots.html here].
  
 
== Overclocking/Underclocking ==
 
== Overclocking/Underclocking ==
The Raspberry Pi can be overclocked by editing {{ic|/boot/config.txt}}, for example:
+
The RPi can be overclocked by editing {{ic|/boot/config.txt}}, for example:
 
   
 
   
 
  arm_freq=800
 
  arm_freq=800
Line 68: Line 102:
 
  over_voltage=0
 
  over_voltage=0
  
The optional xxx_min lines define the min usage of their respective settings.  When the system is not under load, the values will drop down to those specified.  Consult the [[http://elinux.org/RPiconfig#Overclocking Overclocking]] article on elinux for additional options and examples.
+
The optional xxx_min lines define the min usage of their respective settings.  When the system is not under load, the values will drop down to those specified.  Consult the [http://elinux.org/RPiconfig#Overclocking Overclocking] article on elinux for additional options and examples.
  
 
A reboot is needed for new settings to take effect.
 
A reboot is needed for new settings to take effect.
Line 75: Line 109:
  
 
Users may query the current frequency of the CPU via this command:
 
Users may query the current frequency of the CPU via this command:
  cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
+
  $ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
  
== Serial Console ==
+
== Tips for Maximizing SD Card Performance ==
Edit the default /boot/cmdline.txt
+
  
Change loglevel to 5 to see boot messages
+
{{Accuracy|1=Very questionable tips, see also [https://wiki.archlinux.org/index.php?title=ArchWiki:Reports&diff=next&oldid=286971].}}
 +
 
 +
=== Enable TRIM and noatime by Mount Flags ===
 +
 
 +
Using this flag in one's {{ic|/etc/fstab}} enables TRIM and noatime on the root ext4 partition. For example:
 +
/dev/root  /  ext4  noatime,'''discard'''  0  0
 +
 
 +
{{Note|/dev/root entry maybe missing from your /etc/fstab; by default it is mounted as a VFS by the kernel during system boot.}}
 +
 
 +
=== Move /var/log to  RAM ===
 +
 
 +
{{Warning|All system logs will be lost on every reboot.}}
 +
 
 +
Add this entry to your {{ic|/etc/fstab}} to create a RAM disk that is 16MiB in size:
 +
tmpfs  /var/log        tmpfs  nodev,nosuid,size=16M  0      0
 +
 
 +
Delete your existing log directory:
 +
# rm -R /var/log
 +
 
 +
Reboot system for changes to take affect.
 +
 
 +
=== Link bash_history to /dev/null ===
 +
 
 +
{{Warning|Your bash history be lost at the end of each session.}}
 +
 
 +
# ln -sf /dev/null ~/.bash_history
 +
 
 +
== Serial Console ==
 +
Edit the default {{ic|/boot/cmdline.txt}}, change {{ic|loglevel}} to {{ic|5}} to see boot messages:
 
  loglevel=5
 
  loglevel=5
  
Change speed from 115200 to 38400
+
Change speed from 115200 to 38400:
 
  console=ttyAMA0,38400 kgdboc=ttyAMA0,38400
 
  console=ttyAMA0,38400 kgdboc=ttyAMA0,38400
  
 
Start getty service
 
Start getty service
  systemctl start getty@ttyAMA0
+
  # systemctl start getty@ttyAMA0
  
 
Enable on boot
 
Enable on boot
  systemctl enable getty@ttyAMA0.service
+
  # systemctl enable getty@ttyAMA0.service
  
 
Creating the proper service link:
 
Creating the proper service link:
  ln -s /usr/lib/systemd/system/getty@.service /etc/systemd/system/getty.target.wants/getty@ttyAMA0.service
+
  # ln -s /usr/lib/systemd/system/serial-getty@.service /etc/systemd/system/getty.target.wants/serial-getty@ttyAMA0.service
  
 
Then connect :)
 
Then connect :)
  screen /dev/ttyUSB0 38400
+
  # screen /dev/ttyUSB0 38400
  
== Video ==
+
== Raspberry Pi Camera module ==
pacman -S xf86-video-fbdev
+
The commands for the camera module are including as part of the '''raspberrypi-firmware-tools''' package - which is installed by default. You can then use:
 +
$ /opt/vc/bin/raspistill
 +
$ /opt/vc/bin/raspivid
  
Adjustments are likely required to correct proper overscan/underscan and are easily achieved in {{ic|boot/config.txt}} in which many tweaks are setTo fix, simply uncomment the corresponding lines and setup per the commented instructions:
+
You need to append to {{ic|/boot/config.txt}}:
 +
start_file=start_x.elf
 +
  fixup_file=fixup_x.dat
  
# uncomment the following to adjust overscan. Use positive numbers if console
+
Optionally
# goes off screen, and negative if there is too much border
+
  disable_camera_led=1
#overscan_left=16
+
overscan_right=8
+
overscan_top=-16
+
  overscan_bottom=-16
+
  
Users wishing to use the analog video out should consult [https://raw.github.com/Evilpaul/RPi-config/master/config.txt this] config file which contains options for non-NTSC outputs.
+
if you get the following error:  
 +
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
  
A reboot is needed for new settings to take effect.
+
try setting these values in {{ic|/boot/config.txt}}:
 +
cma_lwm=
 +
cma_hwm=
 +
cma_offline_start=
 +
 
 +
== Hardware Random Number Generator ==
 +
ArchLinux ARM for the Raspberry Pi is distributed with the '''rng-tools''' package installed and the '''bcm2708-rng''' module set to load at boot (see [http://archlinuxarm.org/forum/viewtopic.php?f=31&t=4993#p27708 this]), but we must also tell the Hardware RNG Entropy Gatherer Daemon ('''rngd''') where to find the hardware random number generator.
 +
 
 +
This can be done by editing {{ic|/etc/conf.d/rngd}}:
 +
RNGD_OPTS="-o /dev/random -r /dev/hwrng"
 +
and restarting the '''rngd''' daemon:
 +
systemctl restart rngd
 +
 
 +
Once completed, this change ensures that data from the hardware random number generator is fed into the kernel's entropy pool at {{ic|/dev/random}}.
 +
 
 +
== GPIO ==
 +
=== Python ===
 +
To be able to use the GPIO pins from Python, you can use the [https://pypi.python.org/pypi/RPi.GPIO RPi.GPIO] library.
 +
 
 +
To install it, first install the '''base-devel''' group. Download the latest version of the library from PyPI (link above), extract it and run the following command:
 +
# python setup.py install
 +
 
 +
== See also ==
 +
* [http://elinux.org/RPiconfig RPi Config] - Excellent source of info relating to under-the-hood tweaks.
 +
* [http://elinux.org/RPI_vcgencmd_usage RPi vcgencmd usage] - Overview of firmware command vcgencmd.
 +
* [http://archpi.dabase.com/ Archlinux ARM on Raspberry PI] - A FAQ style site with hints and tips for running Archlinux on the rpi

Revision as of 15:02, 16 March 2014

Raspberry Pi (RPi) is a minimalist computer built for the ARMv6 architecture. More information about this project and technical specification.

Article Preface

This article is not meant to be an exhaustive setup guide and assumes that the reader has setup an Arch system before. Arch newbies are encouraged to read the Beginners' guide if unsure how to preform standard tasks such as creating users, managing the system, etc.

Note: Support for the ARM architecture is provided on http://archlinuxarm.org not through posts to the official Arch Linux Forum. Any posts related to ARM specific issues will be promptly closed per the Arch Linux Distribution Support ONLY policy.

Installing Arch Linux ARM

See the Arch Linux ARM documentation.

Audio

Note: The requisite module snd-bcm2835 should be autoloaded by default.

Install the alsa-utils, alsa-firmware, alsa-lib and alsa-plugins packages:

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

Optionally adjust the default volume using alsamixer and ensure that the sole source "PCM" is not muted (denoted by MM if muted, press M to unmute).

Select an audio source for output:

$ amixer cset numid=3 x

Where x corresponds to:

  • 0 for Auto
  • 1 for Analog out
  • 3 for HDMI

Caveats for HDMI Audio

Some applications require a setting in /boot/config.txt to force audio over HDMI:

hdmi_drive=2

Video

HDMI / Analog TV-Out

To turn the HDMI or analog TV-Out on or off, have a look at

/opt/vc/bin/tvservice

Use the -s parameter to check the status of your display, the -o parameter to turn your display off and -p parameter to power on HDMI with preferred settings.

Adjustments are likely required to correct proper overscan/underscan and are easily achieved in boot/config.txt in which many tweaks are set. To fix, simply uncomment the corresponding lines and setup per the commented instructions:

# 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

Users wishing to use the analog video out should consult this config file which contains options for non-NTSC outputs.

A reboot is needed for new settings to take effect.

X.org driver

The X.org driver for Raspberry Pi can be installed with the xf86-video-fbdev package:

# pacman -S xf86-video-fbdev

Onboard Hardware Sensors

Temperature

Temperatures sensors can be queried with utils in the raspberrypi-firmware-tools package. The RPi offers a sensor on the BCM2835 SoC (CPU/GPU):

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

Alternatively, simply read from the file system:

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

For human readable output:

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

Voltage

Four different voltages can be monitored via /opt/vc/bin/vcgencmd as well:

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

Where <id> is:

  • core for core voltage
  • sdram_c for sdram Core voltage
  • sdram_i for sdram I/O voltage
  • sdram_p for sdram PHY voltage

Lightweight Monitoring Suite

monitorixAUR has specific support for the RPi since v3.2.0. Screenshots available here.

Overclocking/Underclocking

The RPi can be overclocked by editing /boot/config.txt, for example:

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

The optional xxx_min lines define the min usage of their respective settings. When the system is not under load, the values will drop down to those specified. Consult the Overclocking article on elinux for additional options and examples.

A reboot is needed for new settings to take effect.

Note: The overclocked setting for CPU clock applies only when the governor throttles up the CPU, i.e. under load.

Users may query the current frequency of the CPU via this command:

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

Tips for Maximizing SD Card Performance

Tango-inaccurate.pngThe factual accuracy of this article or section is disputed.Tango-inaccurate.png

Reason: Very questionable tips, see also [1]. (Discuss in Talk:Raspberry Pi#)

Enable TRIM and noatime by Mount Flags

Using this flag in one's /etc/fstab enables TRIM and noatime on the root ext4 partition. For example:

/dev/root  /  ext4  noatime,discard  0  0
Note: /dev/root entry maybe missing from your /etc/fstab; by default it is mounted as a VFS by the kernel during system boot.

Move /var/log to RAM

Warning: All system logs will be lost on every reboot.

Add this entry to your /etc/fstab to create a RAM disk that is 16MiB in size:

tmpfs   /var/log        tmpfs   nodev,nosuid,size=16M   0       0

Delete your existing log directory:

# rm -R /var/log

Reboot system for changes to take affect.

Link bash_history to /dev/null

Warning: Your bash history be lost at the end of each session.
# ln -sf /dev/null ~/.bash_history

Serial Console

Edit the default /boot/cmdline.txt, change loglevel to 5 to see boot messages:

loglevel=5

Change speed from 115200 to 38400:

console=ttyAMA0,38400 kgdboc=ttyAMA0,38400

Start getty service

# systemctl start getty@ttyAMA0

Enable on boot

# systemctl enable getty@ttyAMA0.service

Creating the proper service link:

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

Then connect :)

# screen /dev/ttyUSB0 38400

Raspberry Pi Camera module

The commands for the camera module are including as part of the raspberrypi-firmware-tools package - which is installed by default. You can then use:

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

You need to append to /boot/config.txt:

start_file=start_x.elf
fixup_file=fixup_x.dat

Optionally

disable_camera_led=1

if you get the following error:

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

try setting these values in /boot/config.txt:

cma_lwm=
cma_hwm=
cma_offline_start=

Hardware Random Number Generator

ArchLinux ARM for the Raspberry Pi is distributed with the rng-tools package installed and the bcm2708-rng module set to load at boot (see this), but we must also tell the Hardware RNG Entropy Gatherer Daemon (rngd) where to find the hardware random number generator.

This can be done by editing /etc/conf.d/rngd:

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

and restarting the rngd daemon:

systemctl restart rngd

Once completed, this change ensures that data from the hardware random number generator is fed into the kernel's entropy pool at /dev/random.

GPIO

Python

To be able to use the GPIO pins from Python, you can use the RPi.GPIO library.

To install it, first install the base-devel group. Download the latest version of the library from PyPI (link above), extract it and run the following command:

# python setup.py install

See also