Raspberry Pi Userland (VCGENCMD)

Warning

Please, follow http://www.funtoo.org/Raspberry_Pi

In above mentioned guide installation is more detailed

The Raspberry Pi is an ARM device (BCM2835, ARMv6).

This document contains notes about install Userland for Raspberry Pi on Funtoo Linux. Most information is already available on other documents, so this document mostly explains how to get the information needed to perform the installation.

Please read Funtoo Linux Installation on ARM for general information about installing Funtoo Linux on ARM architecture.

Please read Raspberry Pi for general information about installing Funtoo Linux on Raspberry Pi Board (armv6j).

The media-libs/raspberrypi-userland is ebuild to compile Raspberry Pi userspace tools and libraries.

Installation

Raspberry Pi Userland

Get Raspberry Pi userspace tools and libraries (VCGENCMD):

# cd /tmp/
# git clone --depth 1 git://github.com/raspberrypi/firmware/
# cp -r firmware/hardfp/opt/vc /opt/

Configure PATH and libs:

# echo -e '# /etc/env.d/00vcgencmd\n# Do not edit this file\n\nPATH="/opt/vc/bin:/opt/vc/sbin"\nROOTPATH="/opt/vc/bin:/opt/vc/sbin"\nLDPATH="/opt/vc/lib"' > /etc/env.d/00vcgencmd
# env-update
# ldconfig

Commands

Amount of memory dedicated to the operating system and video

# vcgencmd get_mem arm && vcgencmd get_mem gpu

Frequency (clock)

# for src in arm core h264 isp v3d uart pwm emmc pixel vec hdmi dpi ; do echo -e "$src:\t$(vcgencmd measure_clock $src)" ; done

Volts

# for id in core sdram_c sdram_i sdram_p ; do  echo -e "$id:\t$(vcgencmd measure_volts $id)" ;  done

Version

Show firmware version:

# vcgencmd version

Temperature

Try measure temperature:

# vcgencmd measure_temp
temp=48.7'C

Codecs

Shows whether the specified codec is enabled, the codec can be one of H264, MPG2, WVC1, MPG4, MJPG, WMV9. Please note that it was implemented in a Pi with licenses MPG2 e VC1 activated.

# for codec in H264 MPG2 WVC1 MPG4 MJPG WMV9 ; do echo -e "$codec:\t$(vcgencmd codec_enabled $codec)" ; done

Performance analysis

This analysis require "stress" ebuild:

# emerge app-benchmarks/stress

Measure the temperature and cause a 'stress' to measure heat dissipation:

# vcgencmd measure_temp && stress  --cpu 1 -t 300 &&  vcgencmd measure_temp

You may notice that "stress" the processor increases the temperature, but nowhere near 80 ° C. I always compile a lot of things in parallel so distributed with x86_64 hosts or other raspberry's cluster.

Controlling the temperature of the Raspberry Pi

For security reasons, add a script that will check the temperature every five minutes and turn off the Raspberry Pi if it exceeds 78 ° C.

# vi /usr/bin/tempcheck
#!/bin/sh
# This script reads the value of the SoC Broadcom temperature and turns off
# Exceeds a certain value.
# 80 ° C is the maximum allowed for a Raspberry Pi.

LOCK="/tmp/tempcheck.lock"
if [ -e ${LOCK} ]; then
        echo -e "SoC temperature check failure. Another process is in execution:\n\n"
        exit 1
fi

#####################################
# Creating LOCK
touch ${LOCK}

# Transforms the value read in integer
SENSOR="$(vcgencmd measure_temp | cut -d "=" -f2 | cut -d "'" -f1 | cut -d '.' -f1)"
TEMP="$(printf "%.0f\n" ${SENSOR})"
# Sets supported maximum temperature
MAX="78"

if [ "${TEMP}" -gt "${MAX}" ] ; then
        # Will be sent an email to the root if executed via cron
        echo "${TEMP}ºC is too hot!"
        # Logs an event in the system log
        /usr/bin/logger "Shutting down due to SoC temp ${TEMP}."
        # Halt hardware
        rm ${LOCK}
        /sbin/shutdown -h now
else
        # Remove lock
        rm ${LOCK}
        exit 0
fi
Give execute permission:

#  chmod +x /usr/bin/tempcheck

Set the Crontab to run the script every 5 minutes:

*/5 *   *   *   *    /usr/bin/tempcheck