#!/bin/bash
|
|
|
|
: <<'DISCLAIMER'
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
|
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
This script is licensed under the terms of the MIT license.
|
|
Unless otherwise noted, code reproduced herein
|
|
was written for this script.
|
|
|
|
Originally written by the - The Pimoroni Crew -
|
|
|
|
|
|
DISCLAIMER
|
|
|
|
productname="na" # the name of the product to install
|
|
baseurl="http://www.adafru.it"
|
|
scriptname="i2c" # the name of this script
|
|
spacereq=1 # minimum size required on root partition in MB
|
|
debugmode="no" # whether the script should use debug routines
|
|
debuguser="none" # optional test git user to use in debug mode
|
|
debugpoint="none" # optional git repo branch or tag to checkout
|
|
forcesudo="yes" # whether the script requires to be ran with root privileges
|
|
promptreboot="no" # whether the script should always prompt user to reboot
|
|
customcmd="yes" # whether to execute commands specified before exit
|
|
armhfonly="yes" # whether the script is allowed to run on other arch
|
|
armv6="yes" # whether armv6 processors are supported
|
|
armv7="yes" # whether armv7 processors are supported
|
|
armv8="yes" # whether armv8 processors are supported
|
|
raspbianonly="no" # whether the script is allowed to run on other OSes
|
|
macosxsupport="no" # whether Mac OS X is supported by the script
|
|
osreleases=( "Raspbian" ) # list os-releases supported
|
|
oswarning=( "Debian" "Ubuntu" "Mate" ) # list experimental os-releases
|
|
squeezesupport="no" # whether Squeeze is supported
|
|
wheezysupport="yes" # whether Wheezy is supported
|
|
jessiesupport="yes" # whether Jessie is supported
|
|
|
|
FORCE=$1
|
|
DEVICE_TREE=true
|
|
ASK_TO_REBOOT=false
|
|
CURRENT_SETTING=false
|
|
UPDATE_DB=false
|
|
|
|
BOOTCMD=/boot/cmdline.txt
|
|
CONFIG=/boot/config.txt
|
|
APTSRC=/etc/apt/sources.list
|
|
INITABCONF=/etc/inittab
|
|
BLACKLIST=/etc/modprobe.d/raspi-blacklist.conf
|
|
LOADMOD=/etc/modules
|
|
DTBODIR=/boot/overlays
|
|
|
|
confirm() {
|
|
if [ "$FORCE" == '-y' ]; then
|
|
true
|
|
else
|
|
read -r -p "$1 [y/N] " response < /dev/tty
|
|
if [[ $response =~ ^(yes|y|Y)$ ]]; then
|
|
true
|
|
else
|
|
false
|
|
fi
|
|
fi
|
|
}
|
|
|
|
prompt() {
|
|
read -r -p "$1 [y/N] " response < /dev/tty
|
|
if [[ $response =~ ^(yes|y|Y)$ ]]; then
|
|
true
|
|
else
|
|
false
|
|
fi
|
|
}
|
|
|
|
success() {
|
|
echo "$(tput setaf 2)$1$(tput sgr0)"
|
|
}
|
|
|
|
warning() {
|
|
echo "$(tput setaf 1)$1$(tput sgr0)"
|
|
}
|
|
|
|
newline() {
|
|
echo ""
|
|
}
|
|
|
|
sudocheck() {
|
|
if [ $(id -u) -ne 0 ]; then
|
|
echo -e "Install must be run as root. Try 'sudo ./$scriptname'\n"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
sysclean() {
|
|
sudo apt-get clean && sudo apt-get autoclean
|
|
sudo apt-get -y autoremove &> /dev/null
|
|
}
|
|
|
|
sysupdate() {
|
|
if ! $UPDATE_DB; then
|
|
sudo apt-get update
|
|
UPDATE_DB=true
|
|
fi
|
|
}
|
|
|
|
sysupgrade() {
|
|
sudo apt-get update && sudo apt-get upgrade
|
|
sudo apt-get clean && sudo apt-get autoclean
|
|
sudo apt-get -y autoremove &> /dev/null
|
|
}
|
|
|
|
sysreboot() {
|
|
warning "Some changes made to your system require"
|
|
warning "your computer to reboot to take effect."
|
|
newline
|
|
if prompt "Would you like to reboot now?"; then
|
|
sync && sudo reboot
|
|
fi
|
|
}
|
|
|
|
arch_check() {
|
|
IS_ARMHF=false
|
|
IS_ARMv6=false
|
|
|
|
if uname -m | grep "armv.l" > /dev/null; then
|
|
IS_ARMHF=true
|
|
if uname -m | grep "armv6l" > /dev/null; then
|
|
IS_ARMv6=true
|
|
fi
|
|
fi
|
|
}
|
|
|
|
os_check() {
|
|
IS_RASPBIAN=false
|
|
IS_MACOSX=false
|
|
IS_SUPPORTED=false
|
|
IS_EXPERIMENTAL=false
|
|
|
|
if [ -f /etc/os-release ]; then
|
|
if cat /etc/os-release | grep "Raspbian" > /dev/null; then
|
|
IS_RASPBIAN=true && IS_SUPPORTED=true
|
|
fi
|
|
if command -v apt-get > /dev/null; then
|
|
for os in ${osreleases[@]}; do
|
|
if cat /etc/os-release | grep "$os" > /dev/null; then
|
|
IS_SUPPORTED=true
|
|
fi
|
|
done
|
|
for os in ${oswarning[@]}; do
|
|
if cat /etc/os-release | grep "$os" > /dev/null; then
|
|
IS_EXPERIMENTAL=true
|
|
fi
|
|
done
|
|
fi
|
|
elif uname -s | grep "Darwin" > /dev/null; then
|
|
IS_MACOSX=true
|
|
if [ $macosxsupport == "yes" ]; then
|
|
IS_SUPPORTED=true
|
|
fi
|
|
fi
|
|
}
|
|
|
|
raspbian_check() {
|
|
IS_SQUEEZE=false
|
|
IS_WHEEZY=false
|
|
IS_JESSIE=false
|
|
|
|
if [ -f /etc/os-release ]; then
|
|
if cat /etc/os-release | grep "jessie" > /dev/null; then
|
|
IS_JESSIE=true
|
|
elif cat /etc/os-release | grep "wheezy" > /dev/null; then
|
|
IS_WHEEZY=true
|
|
elif cat /etc/os-release | grep "squeeze" > /dev/null; then
|
|
IS_SQUEEZE=true
|
|
else
|
|
echo "Unsupported distribution"
|
|
exit 1
|
|
fi
|
|
fi
|
|
}
|
|
|
|
raspbian_old() {
|
|
if $IS_SQUEEZE || $IS_WHEEZY ;then
|
|
true
|
|
else
|
|
false
|
|
fi
|
|
}
|
|
|
|
dt_check() {
|
|
if [ -e $CONFIG ] && grep -q "^device_tree=$" $CONFIG; then
|
|
DEVICE_TREE=false
|
|
fi
|
|
}
|
|
|
|
i2c_check() {
|
|
if [ -e $CONFIG ] && grep -q -E "^(device_tree_param|dtparam)=([^,]*,)*i2c(_arm)?(=(on|true|yes|1))?(,.*)?$" $CONFIG; then
|
|
CURRENT_SETTING=true
|
|
else
|
|
CURRENT_SETTING=false
|
|
fi
|
|
}
|
|
|
|
spi_check() {
|
|
if [ -e $CONFIG ] && grep -q -E "^(device_tree_param|dtparam)=([^,]*,)*spi(=(on|true|yes|1))?(,.*)?$" $CONFIG; then
|
|
CURRENT_SETTING=true
|
|
else
|
|
CURRENT_SETTING=false
|
|
fi
|
|
}
|
|
|
|
get_init_sys() {
|
|
if command -v systemctl > /dev/null && systemctl | grep -q '\-\.mount'; then
|
|
SYSTEMD=1
|
|
elif [ -f /etc/init.d/cron ] && [ ! -h /etc/init.d/cron ]; then
|
|
SYSTEMD=0
|
|
else
|
|
echo "Unrecognised init system" && exit 1
|
|
fi
|
|
}
|
|
|
|
get_hw_rev() {
|
|
hwrid=$(grep "^Revision" /proc/cpuinfo | rev | cut -c 2-3 | rev)
|
|
if [ "$hwrid" == "00" ] || [ "$hwrid" == "01" ];then # Pi 1
|
|
hwver="$(grep "^Revision" /proc/cpuinfo | rev | cut -c 1-4 | rev)"
|
|
if [ "$hwrid" == "00" ];then
|
|
hwgen="126" # P1
|
|
elif [ "$hwrid" == "01" ];then
|
|
hwgen="140" # J8
|
|
fi
|
|
else
|
|
hwver="$(grep "^Revision" /proc/cpuinfo | rev | cut -c 1-6 | rev)"
|
|
if [ "$hwrid" == "04" ];then # Pi 2
|
|
hwgen="240"
|
|
elif [ "$hwrid" == "08" ];then # Pi 3
|
|
hwgen="340"
|
|
elif [ "$hwrid" == "09" ];then # Pi 0
|
|
hwgen="040"
|
|
else # Unknown
|
|
hwgen="000"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
: <<'MAINSTART'
|
|
|
|
Perform all global variables declarations as well as function definition
|
|
above this section for clarity, thanks!
|
|
|
|
MAINSTART
|
|
|
|
dt_check
|
|
arch_check
|
|
os_check
|
|
|
|
if ! $IS_ARMHF; then
|
|
warning "This hardware is not supported, sorry!"
|
|
warning "Config files have been left untouched"
|
|
newline && exit 1
|
|
fi
|
|
|
|
if $IS_RASPBIAN; then
|
|
raspbian_check
|
|
if [ $wheezysupport == "no" ] && raspbian_old; then
|
|
newline && warning "--- Warning ---" && newline
|
|
echo "The $productname installer"
|
|
echo "does not work on this version of Raspbian."
|
|
echo "Check https://github.com/$gitusername/$gitreponame"
|
|
echo "for additional information and support"
|
|
newline && exit 1
|
|
fi
|
|
elif [ $raspbianonly == "yes" ];then
|
|
warning "This script is intended for Raspbian on a Raspberry Pi!"
|
|
newline && exit 1
|
|
else
|
|
if ! $IS_SUPPORTED && ! $IS_EXPERIMENTAL; then
|
|
warning "Your operating system is not supported, sorry!"
|
|
warning "Config files have been left untouched"
|
|
newline && exit 1
|
|
fi
|
|
fi
|
|
|
|
if [ $forcesudo == "yes" ]; then
|
|
sudocheck
|
|
fi
|
|
|
|
newline
|
|
echo "This script will enable I2C on your Raspberry Pi"
|
|
newline
|
|
warning "--- Warning ---"
|
|
newline
|
|
echo "Always be careful when running scripts and commands"
|
|
echo "copied from the internet. Ensure they are from a"
|
|
echo "trusted source."
|
|
newline
|
|
echo "If you want to see what this script does before"
|
|
echo "running it, you should run:"
|
|
echo " curl -sS $baseurl/$scriptname"
|
|
newline
|
|
|
|
if confirm "Do you wish to continue?"; then
|
|
|
|
i2c_check
|
|
|
|
if $DEVICE_TREE && ! $CURRENT_SETTING; then
|
|
newline
|
|
echo "Device Tree Detected"
|
|
echo "Enabling I2C..."
|
|
newline
|
|
if grep -q "^dtparam=i2c_arm=off" $CONFIG; then
|
|
sudo sed -i "s|^dtparam=i2c_arm=off|dtparam=i2c_arm=on|" $CONFIG &> /dev/null
|
|
elif grep -q "^#dtparam=i2c_arm=on" $CONFIG; then
|
|
sudo sed -i "s|^#dtparam=i2c_arm=on|dtparam=i2c_arm=on|" $CONFIG &> /dev/null
|
|
else
|
|
echo "dtparam=i2c_arm=on" | sudo tee -a $CONFIG &> /dev/null
|
|
fi
|
|
echo "$BLACKLIST"
|
|
if ! [ -e $BLACKLIST ]; then
|
|
touch $BLACKLIST
|
|
fi
|
|
sudo sed -i "s|^\(blacklist[[:space:]]*i2c[-_]bcm2708\)|#\1|" $BLACKLIST &> /dev/null
|
|
dtparam i2c_arm=on &> /dev/null
|
|
newline
|
|
success "I2C Enabled"
|
|
warning "Reboot required!"
|
|
newline
|
|
ASK_TO_REBOOT=true
|
|
elif ! $DEVICE_TREE && [ -e $BLACKLIST ] && grep -q "^blacklist[[:space:]]*i2c-bcm2708" $BLACKLIST; then
|
|
newline
|
|
echo "No Device Tree Detected"
|
|
echo "Enabling I2C..."
|
|
newline
|
|
echo "Commenting out Blacklist entry in "
|
|
echo "$BLACKLIST"
|
|
sudo sed -i "s|^blacklist[[:space:]]*i2c-bcm2708.*|#blacklist i2c-bcm2708|" $BLACKLIST &> /dev/null
|
|
newline && success "I2C Enabled" && newline
|
|
else
|
|
success "I2C Already Enabled" && newline
|
|
fi
|
|
if ! [ -e $LOADMOD ]; then
|
|
touch $LOADMOD
|
|
fi
|
|
if ! grep -q "^i2c[-_]dev" $LOADMOD; then
|
|
echo "i2c-dev" | sudo tee -a $LOADMOD &> /dev/null
|
|
fi
|
|
if ! grep -qe "i2c[-_]bcm2708" $LOADMOD; then
|
|
echo "i2c-bcm2708" | sudo tee -a $LOADMOD &> /dev/null
|
|
fi
|
|
sudo modprobe -a i2c-bcm2708 i2c-dev
|
|
else
|
|
newline && echo "Aborting..." && newline
|
|
fi
|
|
|
|
exit 0
|