#!/bin/sh loggerName=2-after-Upload.sh MNTDIR=/mnt/rfs UPDATEDIR=/mnt/data/fw AktCompList=/boot/UpdateCompList.txt NeuCompList=$MNTDIR/boot/UpdateCompList.txt ubidev=ubi3 rfs1ubimtd="ubi.mtd=5" rfs2ubimtd="ubi.mtd=6" rfs1ubi=5 rfs2ubi=6 rfs1mtd=mtd5 rfs2mtd=mtd6 kernel1mtd=mtd3 kernel2mtd=mtd4 CompNxLt=NxLtFw.bin CompMlo=MLO.nand CompUboot=u-boot.bin CompKernel=uImage NxLtFwImage=$MNTDIR/boot/$CompNxLt RemoveImage="rm /mnt/data/fw/rootfs.ubi" UpdateKernel="no" SetError="dbus-send --system --print-reply --dest=com.rexroth.akku.SysService /SysObj com.rexroth.akku.SysInterface.freporterror string:"dummy" string:"3243" string:""" RdyFlagSet="dbus-send --system --print-reply --dest=com.rexroth.akku.SysService /SysObj com.rexroth.akku.SysInterface.frdyflagset int32:7" RdyFlagResetSet="dbus-send --system --print-reply --dest=com.rexroth.akku.SysService /SysObj com.rexroth.akku.SysInterface.frdyflagreset int32:7" PopUpDelete="dbus-send --system --print-reply --dest=com.rexroth.akku.GUIService /GUI com.rexroth.akku.gui.fclosepopupString" f_exit(){ $RdyFlagSet $PopUpDelete $SetError $RemoveImage exit 1 } # Update Image vorhanden am vereinbarten Platz vorhanden ? ################################################################################################################## ls -al $UPDATEDIR/rootfs.ubi &> /dev/null if [ "$?" -ne "0" ]; then /usr/bin/logger -s -t $loggerName "Error: Update Image <$UPDATEDIR> nicht vorhanden" f_exit fi # Neighbor Updates ################################################################################################################## ls -al /etc/fwupdate/neighbor_list &> /dev/null if [ $? -eq 0 ]; then limit=`cat /etc/fwupdate/neighbor_list | grep count | awk '{print $2}'` /usr/bin/logger -s -t $loggerName "Info: Anzahl Nachbar Nexos <$limit>" var0=1 while [ "$var0" -le "$limit" ] do addr=`cat /etc/fwupdate/neighbor_list | grep $var0: | awk '{print $2}'` /etc/fwupdate/neighbor_update.sh $addr if [ "$?" -ne "0" ]; then /usr/bin/logger -s -t $loggerName "Error: Update FAILED Nexo <$addr>" else /usr/bin/logger -s -t $loggerName "Info: Update SUCCESS Nexo <$addr>" fi var0=`expr $var0 + 1` done fi # ermitteln der aktiven Partition und die zum Update ################################################################################################################### ActiveMtd=`cat /proc/cmdline | awk '{print $3}'` /usr/bin/logger -s -t $loggerName "aktive Partion <$ActiveMtd>" if [ $ActiveMtd = $rfs1ubimtd ]; then UpdateMtd=$rfs2mtd UpdateUbi=$rfs2ubi kernelUpdateMtd=$kernel2mtd else if [ $ActiveMtd = $rfs2ubimtd ]; then UpdateMtd=$rfs1mtd UpdateUbi=$rfs1ubi kernelUpdateMtd=$kernel1mtd else /usr/bin/logger -s -t $loggerName "Error: keine gültige mtd Partition gefunden <$ActiveMtd>" f_exit fi fi /usr/bin/logger -s -t $loggerName "Info; UpdateMtd <$UpdateMtd>, UpdateUbi <$UpdateUbi>, kernelUpdateMtd <$kernelUpdateMtd>" # ermittle Kernel Version in der Partition die upgedatet werden soll um sie nachher mit neuem Image zu vergleichen ########################################################################################################################################### mkdir $MNTDIR /usr/bin/ubiattach /dev/ubi_ctrl -m $UpdateUbi -d 3 &> /dev/null mount -o sync -t ubifs $ubidev:rootfs $MNTDIR if [ "$?" -ne "0" ]; then /usr/bin/logger -s -t $loggerName "Warning: Kernelversion der nicht aktiven Partiton <$UpdateMtd> lesen. Mount schlaegt fehl -> kernel update=yes" UpdateKernel="yes" else # lese Kernel Version aus KernelVersionAkt=`cat $NeuCompList | grep $CompKernel | awk '{print $2}'` fi umount $MNTDIR /usr/bin/ubidetach /dev/ubi_ctrl -m $UpdateUbi # nicht aktive mtd Partiton löschen und mit neuem Image beschreiben ########################################################################################################################## dbus-send --system --print-reply --dest=com.rexroth.akku.GUIService /GUI com.rexroth.akku.gui.fpopupString string:'FW Update' string:'Flashing
NxFw-Image' int32:2 int32:0 # Partition löschen #/usr/sbin/flash_erase /dev/$UpdateMtd 0 0 #if [ "$?" -ne "0" ]; then # /usr/bin/logger -s -t $loggerName "Error: loeschen der Update-Partition <$UpdateMtd>" # f_exit #else # /usr/bin/logger -s -t $loggerName "Info: Update-Partition <$UpdateMtd> geloescht OK" #fi # Flashen der Partition mit neuem Image /usr/bin/ubiformat /dev/$UpdateMtd -f $UPDATEDIR/rootfs.ubi -y if [ "$?" -ne "0" ]; then logger -s -t $loggerName "Error: Flashen der Update-Partition <$UpdateMtd>" f_exit else logger -s -t $loggerName "Info: Flashen der Update-Partition <$UpdateMtd> OK" fi sync sync sync echo 3 > /proc/sys/vm/drop_caches # Neu geflashtes Image mounten ################################################################################################################################# /usr/bin/ubiattach /dev/ubi_ctrl -m $UpdateUbi -d 3 &> /dev/null mount -o sync -t ubifs $ubidev:rootfs $MNTDIR if [ "$?" -ne "0" ]; then /usr/bin/logger -s -t $loggerName "Warning: Volume <$UpdateMtd> rootfs noch nicht angelegt" /usr/bin/ubimkvol /dev/$ubidev -N rootfs -m if [ "$?" -ne "0" ]; then /usr/bin/logger -s -t $loggerName "Error: Volume kann nicht angelegt werden" f_exit else /usr/bin/logger -s -t $loggerName "Info: Volume angelegt" fi mount -o sync -t ubifs $ubidev:rootfs $MNTDIR if [ "$?" -ne "0" ]; then /usr/bin/logger -s -t $loggerName "Error: Mount der Update-Partition <$UpdateMtd>" f_exit fi fi ################################################################################################################################## # Komponenten (MLO / u-boot / Kernel / NxLt) zum Update checken ################################################################################################################################## # MLO (Update nur vom u-boot aus möglich ################################################################################################################################### mloVersionNeu=`cat $NeuCompList | grep $CompMlo | awk '{print $2}'` mloVersionAkt=`cat $AktCompList | grep $CompMlo | awk '{print $2}'` if [ "$mloVersionNeu" != "$mloVersionAkt" ]; then /usr/bin/logger -s -t $loggerName "Info: $CompMlo Update erforderlich - Neue Version <$mloVersionNeu> Aktuelle Version <$mloVersionAkt>" cp $MNTDIR/boot/$CompMlo $UPDATEDIR/$CompMlo else /usr/bin/logger -s -t $loggerName "Info: Update MLO nicht notwendig - Neue Version <$mloVersionNeu> Aktuelle Version <$mloVersionAkt>" fi # u-boot #################################################################################################################################### ubootVersionNeu=`cat $NeuCompList | grep $CompUboot | awk '{print $2}'` ubootVersionAkt=`cat $AktCompList | grep $CompUboot | awk '{print $2}'` if [ "$ubootVersionNeu" != "$ubootVersionAkt" ]; then dbus-send --system --print-reply --dest=com.rexroth.akku.GUIService /GUI com.rexroth.akku.gui.fpopupString string:'FW Update' string:'Flashing
Bootloader' int32:2 int32:0 /usr/bin/logger -s -t $loggerName "Info: Update u-boot neue Version <$ubootVersionNeu> aktuelle Version <$ubootVersionAkt>" /usr/sbin/flash_eraseall /dev/mtd1 if [ "$?" -ne "0" ]; then /usr/bin/logger -s -t $loggerName "Error:Update u-boot: flash_eraseall /dev/mtd1" f_exit fi /usr/sbin/nandwrite -p /dev/mtd1 /$MNTDIR/boot/$CompUboot if [ "$?" -ne "0" ]; then /usr/bin/logger -s -t $loggerName "Error:Update u-boot: nandwrite -p /dev/mtd1 /$MNTDIR/boot/$CompUboot" f_exit fi /usr/bin/logger -s -t $loggerName "Info: Update u-boot OK" else /usr/bin/logger -s -t $loggerName "Info: Kein Update U-boot - Neue Version <$ubootVersionNeu> aktuelle Version <$ubootVersionAkt>" fi # kernel ########################################################################################################################################## if [ $UpdateKernel = "yes" ]; then # hat sich schon oben entschieden, da die aktuelle Version nicht auslesbar war! dbus-send --system --print-reply --dest=com.rexroth.akku.GUIService /GUI com.rexroth.akku.gui.fpopupString string:'FW Update' string:'Flashing
Kernel' int32:2 int32:0 /usr/bin/logger -s -t $loggerName "Info: Update Kernel Partition <$kernelUpdateMtd>" /usr/sbin/flash_eraseall /dev/$kernelUpdateMtd if [ "$?" -ne "0" ]; then /usr/bin/logger -s -t $loggerName "Error:Update Kernel flash_eraseall /dev/$kernelUpdateMtd" f_exit fi /usr/sbin/nandwrite -p /dev/$kernelUpdateMtd /$MNTDIR/boot/$CompKernel if [ "$?" -ne "0" ]; then /usr/bin/logger -s -t $loggerName "Error:Update u-boot: nandwrite -p /dev/$kernelUpdateMtd /$MNTDIR/boot/$CompKernel" f_exit fi /usr/bin/logger -s -t $loggerName "Info: Update Kernel Partition <$kernelUpdateMtd> OK" else kernelVersionNeu=`cat $NeuCompList | grep $CompKernel | awk '{print $2}'` if [ "$kernelVersionNeu" != "$KernelVersionAkt" ]; then $PopUpFlashKernel /usr/bin/logger -s -t $loggerName "Info: Update Kernel Partition <$kernelUpdateMtd> Neue Version <$kernelVersionNeu> Aktuelle Version <$KernelVersionAkt>" /usr/sbin/flash_eraseall /dev/$kernelUpdateMtd if [ "$?" -ne "0" ]; then /usr/bin/logger -s -t $loggerName "Error:Update Kernel flash_eraseall /dev/$kernelUpdateMtd" f_exit fi /usr/sbin/nandwrite -p /dev/$kernelUpdateMtd /$MNTDIR/boot/$CompKernel if [ "$?" -ne "0" ]; then /usr/bin/logger -s -t $loggerName "Error:Update Kernel nandwrite -p /dev/$kernelUpdateMtd /$MNTDIR/boot/$CompKernel" f_exit fi /usr/bin/logger -s -t $loggerName "Info: Update Kernel Partition <$kernelUpdateMtd> OK" else /usr/bin/logger -s -t $loggerName "Info: Kein Update Kernel - Neue Version <$kernelVersionNeu> Aktuelle Version <$KernelVersionAkt>" fi fi # NxLt (Leistungsteil) ########################################################################################################################################## #NxLtVersionNeu=`cat $NeuCompList | grep NxLtFw.bin | awk '{print $2}'` #NxLtVersionAkt=`cat $AktCompList | grep NxLtFw.bin | awk '{print $2}'` #if [ "$NxLtVersionNeu" != "$NxLtVersionAkt" ]; then # dbus-send --system --print-reply --dest=com.rexroth.akku.GUIService /GUI com.rexroth.akku.gui.fpopupString string:'FW Update' string:'Flashing
NxLt-Image' int32:2 int32:0 # /home/tool/bin/LtUpdate.elf $NxLtFwImage # if [ "$?" -ne "0" ]; then # /usr/bin/logger -s -t $loggerName "Error: NxLt Update" # f_exit # else # /usr/bin/logger -s -t $loggerName "Info: NxLt Update - Firmware geflasht" # sleep 3 # fi #else # /usr/bin/logger -s -t $loggerName "Info: Kein Update NxLt - neue Version <$NxLtVersionNeu> aktuelle Version <$NxLtVersionAkt>" #fi # geflashtes Image wieder aushängen ########################################################################################################################################## umount $MNTDIR if [ "$?" -ne "0" ]; then /usr/bin/logger -s -t $loggerName "Error: umount <$MNTDIR>" f_exit fi /usr/bin/ubidetach /dev/ubi_ctrl -m $UpdateUbi if [ "$?" -ne "0" ]; then /usr/bin/logger -s -t $loggerName "Error: ubidettach <$UpdateUbi>" f_exit fi # Boot Parameter aktualisieren ########################################################################################################################################### if [ $ActiveMtd = $rfs1ubimtd ]; then /usr/bin/logger -s -t $loggerName "Info: rootfs1 ist aktiv -> aktiviere rootfs2" /usr/sbin/fw_setenv activpart 2 if [ "$?" -ne "0" ]; then logger -s -t $loggerName "Error: setenv activpart 2" f_exit fi # prüfen /usr/sbin/fw_printenv | grep -w activpart=2 if [ "$?" -ne "0" ]; then logger -s -t $loggerName "Error: u-boot parameter (activpart=2) nicht uebernommen" /usr/sbin/fw_setenv activpart 2 fi /usr/sbin/fw_setenv switch 1 if [ "$?" -ne "0" ]; then /usr/bin/logger -s -t $loggerName "Error: setenv switch 1" f_exit fi # prüfen /usr/sbin/fw_printenv | grep -w switch=1 if [ "$?" -ne "0" ]; then logger -s -t $loggerName "Error: u-boot parameter (switch=1) nicht uebernommen" /usr/sbin/fw_setenv switch 1 fi fi if [ $ActiveMtd = $rfs2ubimtd ]; then /usr/bin/logger -s -t $loggerName "Info: rootfs2 ist aktiv -> aktiviere rootfs1" /usr/sbin/fw_setenv activpart 1 if [ "$?" -ne "0" ]; then /usr/bin/logger -s -t $loggerName "Error: setenv activpart 1" f_exit fi # prüfen /usr/sbin/fw_printenv | grep -w activpart=1 if [ "$?" -ne "0" ]; then logger -s -t $loggerName "Error: u-boot parameter (activpart=1) nicht uebernommen" /usr/sbin/fw_setenv activpart 1 fi /usr/sbin/fw_setenv switch 1 if [ "$?" -ne "0" ]; then /usr/bin/logger -s -t $loggerName "Error: setenv switch 1" f_exit fi # prüfen /usr/sbin/fw_printenv | grep -w switch=1 if [ "$?" -ne "0" ]; then logger -s -t $loggerName "Error: u-boot parameter (switch=0) nicht uebernommen" /usr/sbin/fw_setenv switch 1 fi fi # Console auf dev->null umleiten /usr/sbin/fw_printenv | grep -w console=/dev/null if [ "$?" -ne "0" ]; then logger -s -t $loggerName "console auf /dev/null geleitet" /usr/sbin/fw_setenv console /dev/null fi # Boot Parameter loggen /usr/sbin/fw_printenv > /var/log/u-boot-para.log # Merker der aktuellen Version Version=`cat /etc/version` echo $Version > /mnt/data/lastFwVersion # dbus-send --system --print-reply --dest=com.rexroth.akku.GUIService /GUI com.rexroth.akku.gui.fpopupString string:'FW Update' string:'Reboot System..' int32:2 int32:0 # Zum Schluß nochmal sync weils Spass macht und hilft ############################################################################################################################### sync echo 3 > /proc/sys/vm/drop_caches # Alles soweit gut -> reboot ################################################################################################################################ /usr/bin/logger -s -t $loggerName "FIRMWARE UPDATE -> NEUSTART DES SYSTEMS" sleep 1 # Nicht auf reboot warten, gleich weiter (& = Hintegrund) /etc/reboot/reboot.sh & exit 0 ################################################################################################################################