nbtevo-system-dump/sda0/opt/mm/bin/prepare_and_start_up_media.sh
2025-06-09 15:07:26 +02:00

157 lines
4.3 KiB
Bash

#!/bin/ksh
# Script to chain start-up of PrepareMedia and NBTMediaMainApp processes.
# Avoids server-starter bottleneck in spawning processes.
SLOG=/dev/console
log_msg()
{
# log to SLOG
echo $* > $SLOG
}
log_error()
{
# log to both SLOG and STDOUT
echo $* > $SLOG
echo $*
}
# Failure exit codes
FAIL_NODEVICE=17
FAIL_WRONGDEVICE=18
FAIL_NORAMDISK=19
FAIL_EXEC=20
FAIL_FINAL=21
fail()
{
EXITCODE=$1
shift
log_error $*
exit $EXITCODE
}
#
# MAIN
#
# log to entertainment special consol -L /hbsystem/multicore/navi/o
if [[ $1 == "-L" ]]; then
SLOG=$2
shift 2
fi
# First argument identifies device type (head unit, RSE).
DEVICE=$1
if [[ "$DEVICE" = "-h" ]]; then
# Head unit. use prepare media option -h to indicate presence of Hard Disk Drive.
PREPARE_MEDIA_OPT="-h"
elif [[ "$DEVICE" = "-r" ]]; then
# RSE. no special options.
PREPARE_MEDIA_OPT=
#Check if BluRay persistence partition exists
BDPERSISTENCE=/mnt/bdpersistence
BDPERSISTENCY_FILE=/var/opt/mm/BDPersistency.img
if [[ -e $BDPERSISTENCE ]]; then
echo "BluRay persistence partition exists, nothing to do!"
if [[ -f $BDPERSISTENCY_FILE ]]; then
echo "Just delete $BDPERSISTENCY_FILE"
rm $BDPERSISTENCY_FILE
fi
else
echo "BluRay persistence partition not existing, do something!"
if [[ -f $BDPERSISTENCY_FILE ]]; then
echo "BDPersistency file available"
else
echo "Create new BDPersistency file"
echo > $BDPERSISTENCY_FILE
dinit -hq -S10m $BDPERSISTENCY_FILE
fi
LOOPBACK_DEVICE=/sbin/devb-loopback
LOOPBACK_OPTIONS="blk cache=128k,automount=bdper0:$BDPERSISTENCE:qnx4 loopback fd=$BDPERSISTENCY_FILE,prefix=bdper,blksz=4096 &"
$LOOPBACK_DEVICE $LOOPBACK_OPTIONS
fi
elif [[ "$DEVICE" = "" ]]; then
fail $FAIL_NODEVICE "$0: Failed to specify device! Please specify either -h or -r!"
else
fail $FAIL_WRONGDEVICE "$0: Wrong device: $DEVICE ! Please specify either -h or -r!"
fi
# First argument has been parsed.
shift
# Action: run PrepareMedia in foreground, if so required.
PREPARE_MEDIA=/opt/mm/bin/PrepareMedia
PREPARE_MEDIA_FINISHED=/dev/shmem/prepareMediaFinished
if [[ ! -e $PREPARE_MEDIA_FINISHED ]]; then
$PREPARE_MEDIA $PREPARE_MEDIA_OPT
log_msg "$0: $PREPARE_MEDIA finished with exit code $?"
if [[ ! -e $PREPARE_MEDIA_FINISHED ]]; then
log_msg "$0: $PREPARE_MEDIA_FINISHED does not exist! Continuing with Media Main App anyway."
fi
else
log_msg "$0: Second or subsequent start, $PREPARE_MEDIA_FINISHED already exists. Continuing with Media Main App."
fi
# Media RAM Disk is a prerequisite for Media Main App.
# It is started by server-starter, so wait for it, if necessary.
MEDIA_RAM_DISK=/ramdisk/mm
if [[ ! -e $MEDIA_RAM_DISK ]]; then
waitfor $MEDIA_RAM_DISK 120.0
if [[ ! -e $MEDIA_RAM_DISK ]]; then
fail $FAIL_NORAMDISK "$0: $MEDIA_RAM_DISK not found!"
fi
fi
GRACENOTE=/mnt/data/mm/gracenote/db/content.xml
if [[ -f $GRACENOTE ]]; then
JAPAN='05'
echo "Check for country $SYSTEM_EINSTELLUNGEN_COUNTRY" > /dev/console
if [[ $SYSTEM_EINSTELLUNGEN_COUNTRY = $JAPAN ]] ; then
echo -n "Coded country is JAPAN, copy Gracenote config to /dev/shmem" > /dev/console
cp /opt/mm/etc/gracenoteJapan.cfg /dev/shmem/gracenote.cfg
else
echo -n "Coded country is not JAPAN, copy Gracenote config to /dev/shmem" > /dev/console
cp /opt/mm/etc/gracenote.cfg /dev/shmem/gracenote.cfg
fi
fi
if [[ "$DEVICE" = "-h" ]]; then
EAF=/mnt/quota/mm/A4A/eaf.cfg
if [[ ! -f $EAF ]]; then
echo "eaf.cfg does not exist - brand=$HMI_BRAND" > /dev/console
MINI='02'
if [[ $HMI_BRAND = $MINI ]]; then
echo "copy eaf_mini.cfg" > /dev/console
cp /opt/mm/etc/eaf_mini.cfg $EAF
else
echo "copy eaf_default.cfg" > /dev/console
cp /opt/mm/etc/eaf_default.cfg $EAF
fi
fi
fi
# Action: Exec into NBTMediaMainApp
# Server-starter retains control because we're exec'ing, rather than creating a child process.
MEDIA_MAIN_APP=/opt/mm/bin/NBTMediaMainApp
log_msg "$0: Exec'ing into $MEDIA_MAIN_APP $*"
exec on -P $MEDIA_MAIN_APP $*
# if we get here, exec failed
fail $FAIL_EXEC "$0: Exec $MEDIA_MAIN_APP failed!"
# we should never get here
exit $FAIL_FINAL