Raspberry Pi - ArchWiki

# Raspberry Pi

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 perform 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.

## Network

### Configure wlan without network

This article or section needs language, wiki syntax or style improvements.

Reason: Basically this section says to transfer the package files and install them offline. The instructions can be greatly simplified, leaving unnecessary hand-holding for obvious steps. Also, linking to Offline installation of packages might be useful (unfortunately out of date). (Discuss)

By default a fresh install will connect to a connected LAN with dhcpcd. If you want to access your Raspberry Pi via wlan from the start, create the necessary files on the sdcard. You need a netctl profile and enable the systemd unit netctl-auto.

- Mount the root partition of the SD card (the drive might have a different name than `/dev/mmcblk0p2`)

    # mount /dev/mmcblk0p2 /mnt

- Create a netctl profile, if you use netctl on your main machine, you can just copy one

    # cp /etc/netctl/profilename /mnt/etc/netctl/

or you can adapt one from the /examples directory `/etc/netctl/examples`. Make sure the profile uses interface `wlan0` not `wlpsXsX`.

- To automatically connect to an available network enable the systemd unit netctl-auto.

    # ln -s /usr/lib/systemd/system/netctl-auto@.service /mnt/etc/systemd/system/multi-user.target.wants/netctl-auto@wlan0.service

- You will probably require three additional packages, wpa_supplicant, wpa_actiond and the dependency, libnl. On the machine you are installing from, determine the current version of those files, browse to http://mirror.archlinuxarm.org/armv6h/core/ and either click to download or note the full name and use wget from the command line. Move those three files to somewhere on the SD Card (such as root).
- Unmount the sdcard

    # umount /mnt

- Insert it in your RPi, connect a screen and keyboard and boot it.
- Connect with `ssh root@alarmpi` password is `root`
- cd to where you put the above files and install them (updating the version numbers as necessary) -

    # pacman -U libnl-3.2.25-1-armv6h.pkg.tar.xz wpa_actiond-1.4-2-armv6h.pkg.tar.xz wpa_supplicant-2.3-1-armv6h.pkg.tar.xz

- You can manually start those services but it may be easier (and a good test) to reboot -

    # shutdown -r now

## 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

monitorix 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 `*_min` lines define the minimum frequency to be used for the given component. When the system is not under load, the frequencies will drop down to the minimum value. Consult the Overclocking article on elinux for additional options and examples.

A reboot is needed for new settings to take effect.

The overclocked setting for CPU clock applies only when the governor throttles up the CPU, i.e. under load. To query the current frequency of the CPU:

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

See CPU frequency scaling for details on scaling governors.

Tip: The following script will show all frequencies set on the 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

## Tips for maximizing SD card performance

See Maximizing performance for the general performance improvements.

### Enable fsck on boot

Follow fsck#Boot time checking. Remember that kernel parameters are specified in `/boot/cmdline.txt`.

## 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 included 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`:

    gpu_mem=128
    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=

If you get the following error:

    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

add the following line into the `/etc/modprobe.d/blacklist.conf`:

    blacklist i2c_bcm2708

In order to use standard applications (those that look for `/dev/video0`) the V4L2 driver must be loaded. This can be done automatically at boot by creating an autoload file such as the following.

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

    bcm2835-v4l2

## Hardware random number generator

Arch Linux 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.

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. Install either python-raspberry-gpio or python2-raspberry-gpio from the AUR.

## QEMU chroot

Sometimes it is easier to work directly on a disk image instead of the real Raspberry Pi. This can be achieved by mounting an SD card containing the RPi root partition and chrooting into it. From the chroot it should be possible to run pacman and install more packages, compile large libraries etc. Since the executables are for the ARM architecture, the translation to x86 needs to be performed by QEMU.

Install binfmt-support and qemu-user-static from the AUR.

Make sure that the ARM to x86 translation is active:

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

Mount the SD card to `mnt/` (the device name may be different for you).

    # mkdir mnt
    # mount /dev/mmcblk0p2 mnt

Copy the QEMU executable, which will handle the translation from ARM, to the SD card root:

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

Finally chroot into the SD card root as described in Change root#Using chroot.

## See also

- RPi Config - Excellent source of info relating to under-the-hood tweaks.
- RPi vcgencmd usage - Overview of firmware command vcgencmd.
- Arch Linux ARM on Raspberry PI - A FAQ style site with hints and tips for running Arch Linux on the RPi

Category:

- ARM architecture