Raspberry Pi Userland (VCGENCMD)

From Funtoo
Revision as of 22:42, October 16, 2018 by Coffnix (talk | contribs)
Jump to navigation Jump to search
   Warning

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

Install dependencies

root # emerge app-admin/sudo dev-util/cmake


Compile Raspberry Pi Userland (recommended)

root # git clone https://github.com/raspberrypi/userland.git
root # cd userland/ ; ./buildme
root # echo '/opt/vc/lib' > /etc/ld.so.conf.d/vc.conf ; ldconfig
root # 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
root # env-update
root # ldconfig


Precompiled Raspberry Pi Userland (optional)

Get Raspberry Pi userspace tools and libraries (VCGENCMD):

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

Configure PATH and libs:

root # 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
root # env-update
root # ldconfig


Commands

Amount of memory dedicated to the operating system and video

root # vcgencmd get_mem arm && vcgencmd get_mem gpu

Frequency (clock)

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

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

Version

Show firmware version:

root # vcgencmd version

Temperature

Try measure temperature:

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

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

root # emerge app-benchmarks/stress

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

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

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

root #  chmod +x /usr/bin/tempcheck

Set the Crontab to run the script every 5 minutes:

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