#!/bin/bash if [ "$1" != "" ] then BUILDDIR="$1" else BUILDDIR="build-exceet" fi if [ "$2" != "" ] then IMAGE="$2" else IMAGE="image-exceet" fi PATH=/sbin:/usr/sbin:/bin:/usr/bin SOURCE_PATH=../$builddir/tmp/deploy/images/ SD_DEVICE=sdc SDB1='' SDB2='' SCRIPT_PATH=/home/user/src/imx6-fsl/local_src/skripte PARTITION_TEMPLATE=$SCRIPT_PATH/partition.template UBOOT_BIN=$SOURCE_PATH/u-boot.imx LINUX=$SOURCE_PATH/uImage ROOT_FS=$SOURCE_PATH/$IMAGE-mx6sexceet.tar.bz2 DTB=$SOURCE_PATH/mx6s-exceet-glyn-0700.dtb ROT="\033[36;1;31m" BLAU="\033[36;1;34m" GRUEN="\033[36;1;32m" SCHWARZ="\033[36;0;30m" ############################################################################### # Funktionen ############################################################################### function print_error () { echo -e " $ROT$1$SCHWARZ" exit -1 } function print_warning () { echo -e " $ROT$1$SCHWARZ" } function check_file() { if [ -f $1 ]; then echo " $2 (Datei $1) gefunden" else print_error "$2 (Datei $1) nicht gefunden" fi } ############################################################################### date1=$(date +"%s") echo "Erzeuge bootfähige SD-Karte ..." echo "Untersuche Voraussetzungen ..." # suche notwendige Dateien check_file $UBOOT_BIN "U-Boot Bootloader" check_file $LINUX "Linux Kernelimage" check_file $ROOT_FS "Linux Rootfilesystem" check_file $PARTITION_TEMPLATE "Partitionierungstemplate" ############################################################################### echo "Suche gemountete SD-Karte ..." #ist eine SD-Karte gemountet? mount | sed -n -e "/\/dev\/$SD_DEVICE/p" >/tmp/judo_tmp.txt if [ -s /tmp/judo_tmp.txt ]; then echo "umount der SD-Karten Partitionen:" # Bezeichnungen der SD Karten extrahieren cat '/tmp/judo_tmp.txt' | sed -n -e 's@.*\(\/media\/.*\)type.*@\1@gp' > /tmp/judo_tmp2.txt # umount der SD Karten Partitionen cat '/tmp/judo_tmp2.txt' | xargs umount cat /tmp/judo_tmp2.txt else echo "keine SD Karte gemountet" # suche gesteckte SD Karte rm -f /tmp/judo_tmp.txt while [ ! -s /tmp/judo_tmp.txt ]; do sudo sfdisk -q -l /dev/$SD_DEVICE | grep /dev/$SD_DEVICE: > /tmp/judo_tmp.txt if [ -s /tmp/judo_tmp.txt ]; then echo "SD Karte ist gesteckt ..." else print_warning "Bitte SD Karte stecken ..." sleep 3 fi done fi ############################################################################### echo "SD Karte Partitionieren ..." cat $PARTITION_TEMPLATE | sudo sfdisk -q --force /dev/$SD_DEVICE >/dev/null partprobe >/dev/null echo "SD Karte Formatieren ..." device=$SD_DEVICE"1" sudo mkfs.vfat /dev/$device >/dev/null device=$SD_DEVICE"2" sudo mkfs.ext3 /dev/$device >/dev/null ############################################################################### echo "Bereich der U-Boot Vars Nullen ..." sudo dd if=/dev/zero of=/dev/$SD_DEVICE bs=1024 seek=768 count=64 conv=fsync >/dev/null echo "Uboot schreiben ..." sudo dd if=$UBOOT_BIN of=/dev/$SD_DEVICE bs=512 seek=2 conv=fsync >/dev/null echo "Kernel schreiben" sudo dd if=$LINUX of=/dev/$SD_DEVICE bs=512 seek=2048 conv=fsync >/dev/null echo "Devicetree schreiben ab 7MB" sudo dd if=$DTB of=/dev/$SD_DEVICE bs=1024 seek=7168 conv=fsync >/dev/null # Rootfilesystem entpacken while [ -z $SDB2 ]; do mount | sed -n -e "/\/dev\/${SD_DEVICE}2/p" >/tmp/judo_tmp.txt if [ -s /tmp/judo_tmp.txt ]; then # Bezeichnungen der SD Partition extrahieren SDB2=$(cat '/tmp/judo_tmp.txt' | sed -n -e 's@.*\(\/media\/.*\)type.*@\1@gp') echo "RootFile System entpacken ..." sudo tar zxvf $ROOT_FS -C $SDB2 sync else print_warning "Karte abziehen und wieder einstecken, damit sie gemountet wird ..." fi sleep 3 done echo "SDB2 = '$SDB2'" ############################################################################### date2=$(date +"%s") diff=$((date2-$date1)) echo -e -n $BLAU echo -e "SD Karte fertig! Erstellungszeit: $diff Sekunde(n)" echo -e -n $SCHWARZ