You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
3.7 KiB
118 lines
3.7 KiB
#!/bin/bash
|
|
# Check if running as root
|
|
if [[ $EUID -ne 0 ]]; then
|
|
echo "This script must be run as root. Use sudo ./setup_tft.sh"
|
|
exit 1
|
|
fi
|
|
|
|
# Define the configuration file path
|
|
CONFIG_FILE="/boot/firmware/config.txt"
|
|
if [ ! -f "$CONFIG_FILE" ]; then
|
|
CONFIG_FILE="/boot/config.txt"
|
|
fi
|
|
|
|
update_config() {
|
|
local key=$1
|
|
local value=$2
|
|
|
|
# Check if the line already exists
|
|
if grep -q "^$key" "$CONFIG_FILE"; then
|
|
# Remove any preceding # and update value if necessary
|
|
sed -i "s/^#$key/$key/" "$CONFIG_FILE"
|
|
if [ -n "$value" ]; then
|
|
sed -i "s|^$key.*|$key=$value|" "$CONFIG_FILE"
|
|
fi
|
|
else
|
|
# Add the line if it doesn't exist
|
|
if [ -z "$value" ]; then
|
|
echo "$key" >> "$CONFIG_FILE"
|
|
else
|
|
echo "$key=$value" >> "$CONFIG_FILE"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
remove_duplicates() {
|
|
local file=$1
|
|
# Retain line breaks and remove duplicate lines
|
|
awk '!seen[$0]++' "$file" > "${file}.tmp"
|
|
mv "${file}.tmp" "$file"
|
|
}
|
|
|
|
# Comment the line max_framebuffers=2 if it exists
|
|
if grep -q "^max_framebuffers=2" "$CONFIG_FILE"; then
|
|
sed -i "s|^max_framebuffers=2|#max_framebuffers=2 (line commented for TFT ILI9488 installation on $(date +%m/%d/%Y))|" "$CONFIG_FILE"
|
|
fi
|
|
|
|
# Comment the dtoverlay=vc4-kms-v3d line
|
|
sed -i "s|^dtoverlay=vc4-kms-v3d|#dtoverlay=vc4-kms-v3d (line commented for TFT ILI9488 installation on $(date +%m/%d/%Y))|" "$CONFIG_FILE"
|
|
|
|
# Add required configuration lines
|
|
echo "#Modifications for ILI9488 installation implemented by the script on $(date +%m/%d/%Y)" >> "$CONFIG_FILE"
|
|
update_config "dtoverlay" "spi0-0cs"
|
|
update_config "dtparam" "spi=on"
|
|
update_config "hdmi_force_hotplug" "1"
|
|
update_config "hdmi_cvt" "480 320 60 1 0 0 0"
|
|
update_config "hdmi_group" "2"
|
|
update_config "hdmi_mode" "87"
|
|
update_config "framebuffer_width" "480"
|
|
update_config "framebuffer_height" "320"
|
|
update_config "dtoverlay" "fbtft_device,name=ili9488,rotate=0,fps=30,speed=16000000"
|
|
update_config "dtparam" "dc_pin=22"
|
|
update_config "dtparam" "reset_pin=11"
|
|
update_config "gpu_mem" "128"
|
|
echo "# Utilized for TFT ILI9488 setup script by AdamoMD" >> "$CONFIG_FILE"
|
|
echo "# https://github.com/adamomd/4inchILI9488RpiScript/" >> "$CONFIG_FILE"
|
|
echo "# Feel free to send feedback and suggestions." >> "$CONFIG_FILE"
|
|
|
|
# Remove duplicates in config.txt
|
|
echo "Removing duplicate lines in config.txt..."
|
|
remove_duplicates "$CONFIG_FILE"
|
|
|
|
# Configure sudoers for fbcp-ili9341
|
|
echo "Setting permissions in sudoers..."
|
|
VISUDO_FILE="/etc/sudoers.d/fbcp-ili9341"
|
|
if [ ! -f "$VISUDO_FILE" ]; then
|
|
echo "ALL ALL=(ALL) NOPASSWD: /usr/local/bin/fbcp-ili9341" > "$VISUDO_FILE"
|
|
chmod 440 "$VISUDO_FILE"
|
|
fi
|
|
|
|
# Set binary permissions
|
|
echo "Configuring permissions for fbcp-ili9341..."
|
|
chmod u+s /usr/local/bin/fbcp-ili9341
|
|
|
|
# Configure rc.local to start fbcp-ili9341
|
|
echo "Configuring /etc/rc.local..."
|
|
RC_LOCAL="/etc/rc.local"
|
|
if [ ! -f "$RC_LOCAL" ]; then
|
|
cat <<EOT > "$RC_LOCAL"
|
|
#!/bin/bash
|
|
# rc.local
|
|
# This script is executed at the end of each multi-user runlevel.
|
|
|
|
# Start fbcp-ili9341
|
|
/usr/local/bin/fbcp-ili9341 >> /var/log/fbcp-ili9341.log 2>&1 &
|
|
|
|
exit 0
|
|
EOT
|
|
chmod +x "$RC_LOCAL"
|
|
else
|
|
if ! grep -q "fbcp-ili9341" "$RC_LOCAL"; then
|
|
sed -i '/exit 0/i \\n# Start fbcp-ili9341\n/usr/local/bin/fbcp-ili9341 >> /var/log/fbcp-ili9341.log 2>&1 &' "$RC_LOCAL"
|
|
fi
|
|
fi
|
|
|
|
# Remove duplicates in rc.local
|
|
echo "Removing duplicate lines in rc.local..."
|
|
remove_duplicates "$RC_LOCAL"
|
|
|
|
# Enable and start rc.local service
|
|
echo "Enabling rc.local service..."
|
|
sudo chmod +x /etc/rc.local
|
|
sudo systemctl enable rc-local
|
|
sudo systemctl start rc-local
|
|
|
|
# Finish and force reboot
|
|
echo "Finalizing processes..."
|
|
killall -9 fbcp-ili9341 2>/dev/null || true
|
|
sync
|