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

760 lines
19 KiB
Bash

#!/bin/ksh
# ----------------------------------------------------------------------
# Project : Harman Car Multimedia System
# Harman/becker Automotive Systems GmbH
# All rights reserved
#
# File : HDD Management Script
# Author : SPreuss
# Co-Author : HSauer
# ----------------------------------------------------------------------
MAC_ADDRESS=FFFFFFFFFFFF
BTMAC_ADDRESS=FFFFFFFFFFFF
NBT_SERIALNUMBER=FFFFFFFFFFFFFFFFFFFF
ADJINFO_READY=0
ADJBLOCK_JACINTO_TXT=NBT_AdjBlock_Jacinto.txt
SYSETADJINFO=sysetadjread
JACINTO_HOST=hu-jacinto
FILE_ADJ_DATA=/net/$JACINTO_HOST/dev/fs0
NAND_FS="/fs/sda0"
REPOSITORY=$NAND_FS/repository/istep
export PATH=$PATH:$REPOSITORY/bin:$REPOSITORY/opt/sys/bin:.
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$REPOSITORY/lib:$REPOSITORY/usr/lib:$REPOSITORY/opt/sys/lib:.
CDIR=$PWD
VERSION=V1.2.7
CHKQNX6FS=chkqnx6fs
HDDSECURITY=hddsecurity2
rRETVAL=0
QUIET=0
BLOCK_SIZE=4096
## new partition table
HDD_SIZE_200GB=195360984
DEF_DATA_200GB="177 /mnt/data ro 135348"
DEF_SHARE_200GB="178 /mnt/share rw 14688"
DEF_MEDIA_200GB="179 /mnt/quota/mm rw 39422"
DEF_DEBUG_200GB="180 /mnt/quota/sys rw 1321"
DOMAIN_DIRS="car conn hmi mm nav speech sys"
DEVICE=/dev/hd0
LOG=/dev/ser1
#LOG=/dev/console
if [[ ! -e $LOG ]]; then
LOG=/dev/null
fi
cd ${0%/*}
export PATH=$PATH:$PWD
cd $CDIR
getDef()
{
rNAME=$1
if [[ $rNAME == data ]]; then
echo $DEF_DATA
elif [[ $rNAME == share ]]; then
echo $DEF_SHARE
elif [[ $rNAME == media ]]; then
echo $DEF_MEDIA
elif [[ $rNAME == debug ]]; then
echo $DEF_DEBUG
else
echo
fi
return 0
}
getAdjInfo()
{
# return if adjust info is already known.
if [[ $ADJINFO_READY -eq 1 ]]; then
return 0
fi
if [[ $rSTAT -eq 0 ]]; then
if [[ -e $FILE_ADJ_DATA ]]; then
ADJINFO=$($SYSETADJINFO --get=E2P.Networking.Eth0MacAddr) && MAC_ADDRESS="${ADJINFO##E2P.Networking.Eth0MacAddr=*( )}"
if [[ $? -eq 0 ]]; then
if [[ ("$MAC_ADDRESS" == "$ADJINFO") || ("$MAC_ADDRESS" == "") || ("$MAC_ADDRESS" == "FFFFFFFFFFFF") || ("$MAC_ADDRESS" == "ffffffffffff") ]]; then
echo "ERROR: Could not read MAC-Address from adjustblock. Please update the ajustblock!"
rSTAT=$((rSTAT + 1))
fi
fi
ADJINFO=$($SYSETADJINFO --get=E2P.Networking.Bt0Addr) && BTMAC_ADDRESS="${ADJINFO##E2P.Networking.Bt0Addr=*( )}"
if [[ $? -eq 0 ]]; then
if [[ ("$BTMAC_ADDRESS" == "$ADJINFO") || ("$BTMAC_ADDRESS" == "") || ("$BTMAC_ADDRESS" == "FFFFFFFFFFFF") || ("$BTMAC_ADDRESS" == "ffffffffffff") ]]; then
echo "ERROR: Could not read BLMAC-Address from adjustblock. Please update the ajustblock!"
rSTAT=$((rSTAT + 1))
fi
fi
ADJINFO=$($SYSETADJINFO --get=E2P.ProdLogistic.SerialNo) && NBT_SERIALNUMBER="${ADJINFO##E2P.ProdLogistic.SerialNo=*( )}"
if [[ $? -eq 0 ]]; then
if [[ ("$NBT_SERIALNUMBER" == "$ADJINFO") || ("$NBT_SERIALNUMBER" == "") || ("$NBT_SERIALNUMBER" == "FFFFFFFFFFFF") || ("$NBT_SERIALNUMBER" == "ffffffffffff") ]]; then
echo "ERROR: Could not read serial number from adjustblock. Please update the ajustblock!"
rSTAT=$((rSTAT + 1))
fi
fi
if [[ $QUIET -eq 0 ]]; then
echo "MAC_ADDRESS: $MAC_ADDRESS"
echo "BTMAC_ADDRESS: $BTMAC_ADDRESS"
echo "NBT_SERIALNUMBER: $NBT_SERIALNUMBER"
ADJINFO_READY=1
fi
else
if [[ -e /net/$JACINTO_HOST ]]; then
echo "ERROR: No flash device $FILE_ADJ_DATA at jacinto available!"
else
echo "ERROR: No connection to jacinto /net/$JACINTO_HOST!"
fi
rSTAT=$((rSTAT + 1))
fi
fi
return $rSTAT
}
kPartitionHdd()
{
rSTAT=0
rDEVICE=$1
rSTART=1
rEND=0
shift
echo "fdisk $rDEVICE delete -a"
fdisk $rDEVICE delete -a || rSTAT=$((rSTAT + 1))
while [[ $# -gt 0 ]]
do
rTYPE=$1
rMP=$2
rMODE=$3
rSIZE=$4
shift; shift; shift; shift
rEND=$((rSTART + $rSIZE - 1))
echo "fdisk $rDEVICE add -t $rTYPE -c $rSTART,$rEND"
fdisk $rDEVICE add -t $rTYPE -c $rSTART,$rEND || rSTAT=$((rSTAT + 1))
rSTART=$((rEND + 1))
done
fdisk $rDEVICE show || rSTAT=$((rSTAT + 1))
mount -e $rDEVICE || rSTAT=$((rSTAT + 1))
return $rSTAT
}
kFormatHdd()
{
rBS=$BLOCK_SIZE
rSTAT=0
rDEVICE=$1
shift
while [[ $# -gt 0 ]]
do
rTYPE=$1
rMP=$2
rMODE=$3
rSIZE=$4
shift; shift; shift; shift
echo "mkqnx6fs -q -b$rBS ${rDEVICE}t$rTYPE"
mkqnx6fs -q -b$rBS ${rDEVICE}t$rTYPE || rSTAT=$((rSTAT + 1))
done
return $rSTAT
}
kMountHdd()
{
rSTAT=0
rDEVICE=$1
shift
while [[ $# -gt 0 ]]
do
rTYPE=$1
rMP=$2
rMODE=$3
rSIZE=$4
shift; shift; shift; shift
if [[ -e $rMP ]]; then
if [[ $QUIET -eq 0 ]]; then
echo "INFO: mount point $rMP already exist!"
fi
else
if [[ $QUIET -eq 0 ]]; then
echo "mount -t qnx6 -o $rMODE ${rDEVICE}t$rTYPE $rMP"
fi
if [[ -e /dev/hd0t180 && -e /dev/hd0t179 && -e /dev/hd0t178 && -e /dev/hd0t177 ]]; then
mount -t qnx6 -o $rMODE ${rDEVICE}t$rTYPE $rMP || rSTAT=$((rSTAT + 1))
else
echo "ERROR: Not all hdd partitions /dev/hd0t1xx could be found!"
if [[ -e /net/$JACINTO_HOST ]]; then
echo "Probably your hdd needs to be initalized."
echo "Please set up your hdd by using the following command: "
echo "create_hdd.sh -i"
else
echo "Probably your hdd is locked, but no adjust data to unlock the hdd is available."
echo "The adjust block must have been flashed and"
echo "qnet has to be established (see: /net/$JACINTO_HOST)."
fi
rSTAT=$((rSTAT + 1))
exit $rSTAT
fi
fi
done
return $rSTAT
}
kReMountHdd()
{
rSTAT=0
rDEVICE=$1
rMODE=$2
shift; shift
while [[ $# -gt 0 ]]
do
rTYPE=$1
rMP=$2
rNULL=$3
rSIZE=$4
shift; shift; shift; shift
if [[ -e $rMP ]]; then
if [[ $QUIET -eq 0 ]]; then
echo "INFO: mount point $rMP already exist!"
fi
else
if [[ $QUIET -eq 0 ]]; then
echo "mount -t qnx6 -o $rMODE ${rDEVICE}t$rTYPE $rMP"
fi
if [[ -e /dev/hd0t180 && -e /dev/hd0t179 && -e /dev/hd0t178 && -e /dev/hd0t177 ]]; then
mount -t qnx6 -o $rMODE ${rDEVICE}t$rTYPE $rMP || rSTAT=$((rSTAT + 1))
else
echo "ERROR: Not all hdd partitions /dev/hd0t1xx could be found!"
if [[ -e /net/$JACINTO_HOST ]]; then
echo "Probably your hdd needs to be initalized."
echo "Please set up your hdd by using the following command: "
echo "create_hdd.sh -i"
else
echo "Probably your hdd is locked, but no adjust data to unlock the hdd is available."
echo "The adjust block must have been flashed and"
echo "qnet has to be established (see: /net/$JACINTO_HOST)."
fi
rSTAT=$((rSTAT + 1))
exit $rSTAT
fi
fi
done
return $rSTAT
}
kUmountHdd()
{
rSTAT=0
rDEVICE=$1
shift
while [[ $# -gt 0 ]]
do
rTYPE=$1
rMP=$2
rMODE=$3
rSIZE=$4
shift; shift; shift; shift
if [[ -e $rMP ]]; then
if [[ $QUIET -eq 0 ]]; then
echo "umount -f $rMP"
fi
umount -f $rMP || rSTAT=$((rSTAT + 1))
else
echo "WRANING: mountpoint $rMP not available"
fi
done
return $rSTAT
}
kDirectoriesHdd()
{
rSTAT=0
rCURRDIR=$PWD
rDEVICE=$1
shift
while [[ $# -gt 0 ]]
do
rTYPE=$1
rMP=$2
rMODE=$3
rSIZE=$4
shift; shift; shift; shift
mount -u -o rw $rMP || rSTAT=$((rSTAT + 1))
cd $rMP
for rDIR in $DOMAIN_DIRS
do
if [[ $QUIET -eq 0 ]]; then
echo "mkdir $rMP/$rDIR"
fi
mkdir -p $rDIR || rSTAT=$((rSTAT + 1))
done
mount -u -o $rMODE $rMP || rSTAT=$((rSTAT + 1))
done
cd $rCURRDIR || rSTAT=$((rSTAT + 1))
return $rSTAT
}
kCleanUp()
{
rSTAT=0
rCURRDIR=$PWD
cd /dev/shmem
rDEVICE=$1
shift
while [[ $# -gt 0 ]]
do
rTYPE=$1
rMP=$2
rMODE=$3
rSIZE=$4
shift; shift; shift; shift
mount -u -o rw $rMP || rSTAT=$((rSTAT + 1))
if [[ $QUIET -eq 0 ]]; then
echo "deleting 'rm -rf $rMP/*' ..."
fi
rm -rf $rMP/* || rSTAT=$((rSTAT + 1))
mount -u -o $rMODE $rMP || rSTAT=$((rSTAT + 1))
done
cd $rCURRDIR || rSTAT=$((rSTAT + 1))
return $rSTAT
}
kHddSecurity()
{
rSTAT=0
rDEVICE=$1
type $HDDSECURITY >/dev/null 2>&1
if [ $? -eq 0 ] ; then
$HDDSECURITY -v -m ${rDEVICE} || rSTAT=$((rSTAT + 1))
else
echo "WARNING: $HDDSECURITY not found!"
fi
return $rSTAT
}
kNoSecurity()
{
rSTAT=0
rDEVICE=$1
type $HDDSECURITY >/dev/null 2>&1
if [ $? -eq 0 ] ; then
getAdjInfo
if [ $? -eq 0 ] ; then
$HDDSECURITY -d $MAC_ADDRESS,$BTMAC_ADDRESS,$NBT_SERIALNUMBER -m ${rDEVICE} >/dev/console 2>&1
if [ $? -gt 1 ]; then
# return value 1 is no password to delete.
rSTAT=$((rSTAT + 1))
fi
fi
else
echo "WARNING: $HDDSECURITY not found!"
fi
return $rSTAT
}
kSecurity()
{
rSTAT=0
rDEVICE=$1
type $HDDSECURITY >/dev/null 2>&1
if [ $? -eq 0 ] ; then
getAdjInfo
if [ $? -eq 0 ] ; then
$HDDSECURITY -s $MAC_ADDRESS,$BTMAC_ADDRESS,$NBT_SERIALNUMBER -m ${rDEVICE} >/dev/console 2>&1
if [ $? -gt 1 ]; then
# return value 1 is no password to delete.
rSTAT=$((rSTAT + 1))
fi
fi
else
echo "WARNING: $HDDSECURITY not found!"
fi
return $rSTAT
}
kHddUnlock()
{
rSTAT=0
rDEVICE=$1
type $HDDSECURITY >/dev/null 2>&1
if [ $? -eq 0 ] ; then
getAdjInfo
if [ $? -eq 0 ] ; then
$HDDSECURITY -u $MAC_ADDRESS,$BTMAC_ADDRESS,$NBT_SERIALNUMBER -m ${rDEVICE} >/dev/console 2>&1
rSTAT=$((rSTAT + $?))
fi
else
echo "WARNING: $HDDSECURITY not found!"
fi
return $rSTAT
}
kChkfs()
{
rSTAT=0
rDEVICE=$1
shift
while [[ $# -gt 0 ]]
do
rTYPE=$1
rMP=$2
rMODE=$3
rSIZE=$4
shift; shift; shift; shift
$CHKQNX6FS -svv ${rDEVICE}t$rTYPE || rSTAT=$((rSTAT + 1))
$CHKQNX6FS -vv ${rDEVICE}t$rTYPE || rSTAT=$((rSTAT + 1))
done
return $rSTAT
}
kHelp()
{
echo "usage $0 [-i] [-c <command> [ -c <command> ] ...]"
echo "-i initalize the HDD partitions: create partiton table, make filesystems and add domain directories."
echo "-m mount all partitons"
echo "-R mount all partitons read only"
echo "-W mount all partitons writeable"
echo "-u umount all partitons"
echo "-f check qnx6fs"
echo "-p print hdd security status"
echo "-d delete the hdd password"
echo "-r clean up all writeable partitions"
echo "-s set the hdd password"
echo "-c <command>"
echo "-q QUIET no messages exept errors."
echo "commands:"
echo "========="
echo "partition: create partiton table"
echo "format: make filesystems"
echo "info: info about partition definition"
echo "mount: mount filesystems"
echo "umount: umount filesystems"
echo "hddsecurity: print hdd security status"
echo "unlock: unlock the hdd"
echo "secure: set the hdd password"
echo "nosecure: delete the hdd password"
echo "directories: make domain directories on certain filesystems"
echo "cleanup: removes content in the writeable partitions: "
echo "chkfs: checks the qnx6 file system"
echo "help: print this help screen"
echo "Commands are executed in the order specified on the command line."
echo "Example: $0 -c partition -c format -c mount -c directories"
echo
}
COMMANDLIST=""
# if there are no arguments
if [[ $# -lt 1 ]] ; then
kHelp
exit 0
fi
# parse command line
while getopts "b:fumic:hsdpqrRW" OPTION
do
case $OPTION in
b)
BLOCK_SIZE=$OPTARG
;;
f)
COMMANDLIST="umount unlock hddsecurity chkfs mount"
;;
i)
COMMANDLIST="umount unlock partition format mount directories"
;;
c)
COMMANDLIST="$COMMANDLIST $OPTARG"
;;
u)
COMMANDLIST="umount"
;;
m)
COMMANDLIST="unlock mount"
;;
R)
COMMANDLIST="remount_r"
;;
W)
COMMANDLIST="remount_w"
;;
p)
COMMANDLIST="hddsecurity"
;;
d)
COMMANDLIST="unlock nosecure"
;;
s)
COMMANDLIST="secure"
;;
r)
COMMANDLIST="cleanup directories"
;;
q)
QUIET=1
;;
h | *)
kHelp
exit 0
;;
esac
done
# preset the partition sizes to 80GB hdd as fallback
DEF_DATA=$DEF_DATA_200GB
DEF_SHARE=$DEF_SHARE_200GB
DEF_MEDIA=$DEF_MEDIA_200GB
DEF_DEBUG=$DEF_DEBUG_200GB
type df >/dev/null 2>&1
if [ $? -ne 0 ] ; then
echo "ERROR: Could not determine HDD size. The 'df' command is not available."
exit 1
fi
# check size of $DEVICE
DF_OUTP=`df -k ${DEVICE}`
CUT_FRONT=${DF_OUTP#* }
CUT_BACK=`echo ${CUT_FRONT%%%* }`
HDD_SIZE=`echo ${CUT_BACK% * * *}`
if [[ $QUIET -eq 0 ]]; then
echo "HDD size: ${HDD_SIZE} [kb]"
fi
if [[ ${HDD_SIZE} -lt ${HDD_SIZE_200GB} ]] ; then
echo "ERROR: HDD size $HDD_SIZE cylinder are too small, expecting $HDD_SIZE_200GB cylinder or more!"
exit 1
fi
if [[ $QUIET -eq 0 ]]; then
echo "-------------------------"
echo "$0 $VERSION"
echo "-------------------------"
fi
for COMMAND in $COMMANDLIST
do
if [[ $COMMAND == partition ]]; then
kPartitionHdd $DEVICE $DEF_DATA $DEF_SHARE $DEF_MEDIA $DEF_DEBUG
rRETVAL=$((rRETVAL + $?))
fi
if [[ $COMMAND == format* ]]; then
if [[ $COMMAND > format ]]; then
def=`getDef ${COMMAND#*_}`
if [[ ! -z $def ]]; then
kFormatHdd $DEVICE $def
rRETVAL=$((rRETVAL + $?))
fi
else
kFormatHdd $DEVICE $DEF_DATA $DEF_SHARE $DEF_MEDIA $DEF_DEBUG
rRETVAL=$((rRETVAL + $?))
fi
fi
if [[ $COMMAND == info* ]]; then
if [[ $COMMAND > info ]]; then
def=`getDef ${COMMAND#*_}`
if [[ ! -z $def ]]; then
echo $def
rRETVAL=$((rRETVAL + $?))
else
echo "info not found ..."
rRETVAL=1
fi
else
def_data=`getDef data`
def_share=`getDef share`
def_media=`getDef media`
def_debug=`getDef debug`
if [[ ! -z def_data ]] && [[ ! -z def_share ]] && [[ ! -z def_media ]] && [[ ! -z def_debug ]]; then
echo $def_data
echo $def_share
echo $def_media
echo $def_debug
else
echo "info not found ..."
rRETVAL=1
fi
fi
fi
if [[ $COMMAND == mount* ]]; then
if [[ $COMMAND > mount ]]; then
def=`getDef ${COMMAND#*_}`
if [[ ! -z $def ]]; then
kMountHdd $DEVICE $def
rRETVAL=$((rRETVAL + $?))
fi
else
kMountHdd $DEVICE $DEF_DATA $DEF_SHARE $DEF_MEDIA $DEF_DEBUG
rRETVAL=$((rRETVAL + $?))
fi
fi
if [[ $COMMAND == remount_r* ]]; then
if [[ $COMMAND > remount_r ]]; then
def=`getDef ${COMMAND#*_}`
if [[ ! -z $def ]]; then
kReMountHdd $DEVICE ro $def
rRETVAL=$((rRETVAL + $?))
fi
else
kReMountHdd $DEVICE ro $DEF_DATA $DEF_SHARE $DEF_MEDIA $DEF_DEBUG
rRETVAL=$((rRETVAL + $?))
fi
fi
if [[ $COMMAND == remount_w* ]]; then
if [[ $COMMAND > remount_w ]]; then
def=`getDef ${COMMAND#*_}`
if [[ ! -z $def ]]; then
kReMountHdd $DEVICE rw $def
rRETVAL=$((rRETVAL + $?))
fi
else
kReMountHdd $DEVICE rw $DEF_DATA $DEF_SHARE $DEF_MEDIA $DEF_DEBUG
rRETVAL=$((rRETVAL + $?))
fi
fi
if [[ $COMMAND == umount* ]]; then
if [[ $COMMAND > umount ]]; then
def=`getDef ${COMMAND#*_}`
if [[ ! -z $def ]]; then
kUmountHdd $DEVICE $def
rRETVAL=$((rRETVAL + $?))
fi
else
kUmountHdd $DEVICE $DEF_DATA $DEF_SHARE $DEF_MEDIA $DEF_DEBUG
rRETVAL=$((rRETVAL + $?))
fi
fi
if [[ $COMMAND == hddsecurity* ]]; then
if [[ $COMMAND > hddsecurity ]]; then
def=`getDef ${COMMAND#*_}`
if [[ ! -z $def ]]; then
kHddSecurity $DEVICE $def
rRETVAL=$((rRETVAL + $?))
fi
else
kHddSecurity $DEVICE
rRETVAL=$((rRETVAL + $?))
fi
fi
if [[ $COMMAND == nosecure* ]]; then
if [[ $COMMAND > nosecure ]]; then
def=`getDef ${COMMAND#*_}`
if [[ -z $def ]]; then
rRETVAL=$((rRETVAL + 1))
echo "ERROR: Wrong paraneters '$def'"
fi
else
kNoSecurity $DEVICE
rRETVAL=$((rRETVAL + $?))
fi
fi
if [[ $COMMAND == secure* ]]; then
if [[ $COMMAND > secure ]]; then
def=`getDef ${COMMAND#*_}`
if [[ -z $def ]]; then
rRETVAL=$((rRETVAL + 1))
echo "ERROR: Wrong paraneters '$def'"
fi
else
kSecurity $DEVICE
rRETVAL=$((rRETVAL + $?))
fi
fi
if [[ $COMMAND == unlock* ]]; then
if [[ $COMMAND > unlock ]]; then
def=`getDef ${COMMAND#*_}`
if [[ ! -z $def ]]; then
rRETVAL=$((rRETVAL + 1))
echo "ERROR: Wrong paraneters '$def'"
fi
else
kHddUnlock $DEVICE
if [ $? -gt 1 ]; then
# return value 1 is no password to unlock.
rRETVAL=$((rRETVAL + $?))
fi
fi
fi
if [[ $COMMAND == chkfs* ]]; then
if [[ $COMMAND > chkfs ]]; then
def=`getDef ${COMMAND#*_}`
if [[ ! -z $def ]]; then
kChkfs $DEVICE $def
rRETVAL=$((rRETVAL + $?))
fi
else
kChkfs $DEVICE $DEF_DATA $DEF_SHARE $DEF_MEDIA $DEF_DEBUG
rRETVAL=$((rRETVAL + $?))
fi
fi
if [[ $COMMAND == directories* ]]; then
if [[ $COMMAND > directories ]]; then
def=`getDef ${COMMAND#*_}`
if [[ $def == $DEF_DATA ]] || [[ $def == $DEF_SHARE ]];then
kDirectoriesHdd $DEVICE $def
rRETVAL=$((rRETVAL + $?))
fi
else
kDirectoriesHdd $DEVICE $DEF_DATA $DEF_SHARE
rRETVAL=$((rRETVAL + $?))
fi
fi
if [[ $COMMAND == cleanup* ]]; then
if [[ $COMMAND > cleanup ]]; then
def=`getDef ${COMMAND#*_}`
if [[ $def == $DEF_MEDIA ]] || [[ $def == $DEF_SHARE ]] || [[ $def == $DEF_DEBUG ]];then
kCleanUp $DEVICE $def
rRETVAL=$((rRETVAL + $?))
fi
else
kCleanUp $DEVICE $DEF_SHARE $DEF_MEDIA $DEF_DEBUG
rRETVAL=$((rRETVAL + $?))
fi
fi
if [[ $COMMAND == help ]]; then
kHelp
fi
if [[ $rRETVAL -ne 0 ]]; then
echo "ERROR: $0 failed returnval=$rRETVAL!"
exit $rRETVAL
fi
done
if [[ $QUIET -eq 0 ]]; then
echo "SUCCESS: $0 finished!"
fi