summaryrefslogtreecommitdiffstats
path: root/utils/ypr0tools/unpack-firmware.sh
blob: ab80670c79d577ef25cc1db10beb00a47604e958 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#!/bin/bash

######################################################################
#             __________               __   ___.
#   Open      \______   \ ____   ____ |  | _\_ |__   _______  ___
#   Source     |       _//  _ \_/ ___\|  |/ /| __ \ /  _ \  \/  /
#   Jukebox    |    |   (  <_> )  \___|    < | \_\ (  <_> > <  <
#   Firmware   |____|_  /\____/ \___  >__|_ \|___  /\____/__/\_ \
#                     \/            \/     \/    \/            \/
#
#   * Script to unpack a Samsung YP-R0 firmware file (R0.ROM) */
######################################################################

# The file was originally called MuonDecrypt.sh
#
# I'm not sure about the original author of this file, as it wasn't included in Samsung package.
# But I guess it was done by JeanLouis, an Italian user of the Hardware Upgrade Forum. If needed, we should search throug old posts for that...
#


# bail out early
set -e

# some sanity checks
if [ $# -lt 1 ] || [ $# -gt 2 ]; then
    echo "Usage $0 <rom file> [out dir]"
    exit 1
fi


ROM=$1
DIR=${2:-"."}
DIR=${DIR%/}
MBOOT="$DIR/MBoot.bin"
MBOOT_TMP="${TMP_DIR:-$DIR}/MBoot.tmp"
LINUX="$DIR/zImage"
CRAMFS="$DIR/cramfs-fsl.rom"
SYSDATA="$DIR/SYSDATA.bin"
MD5SUMS="$DIR/MD5SUMS"
TMP="${TMP_DIR:-$DIR}/_$$.tmp"


if [ ! -f ./extract_section ]; then
    echo "Couldn't find extract_section binary (try 'make')"
    exit 1
fi

if [ ! -f ./MuonEncrypt ]; then
    echo "Couldn't find MuonEncrypt binary (try 'make')"
    exit 1
fi

mkdir -p $DIR

if [ ! -w $DIR ]; then
    echo "Target dir not writable"
    exit 1
fi

ExtractAndDecrypt() {
	START=$(expr $START - $2)
	echo "Extracting $1..."
	./extract_section $ROM $TMP $START $2
	echo "Decrypt $1..."
	./MuonEncrypt $TMP > $1
}

size=( `head -n 9 $ROM | tail -n 4 | while read LINE; do echo $LINE | cut -d\( -f 2 | cut -d\) -f 1; done`)
checksum=( `head -n 9 $ROM | tail -n 4 | while read LINE; do echo $LINE | cut -d\( -f 3 | cut -d\) -f 1; done`)

echo "${checksum[0]}  $MBOOT" > $MD5SUMS
echo "${checksum[1]}  $LINUX" >> $MD5SUMS
echo "${checksum[2]}  $CRAMFS" >> $MD5SUMS
echo "${checksum[3]}  $SYSDATA" >> $MD5SUMS

START=`stat -c%s $ROM`

ExtractAndDecrypt $SYSDATA ${size[3]}
ExtractAndDecrypt $CRAMFS ${size[2]}
ExtractAndDecrypt $LINUX ${size[1]}
ExtractAndDecrypt $MBOOT_TMP ${size[0]}

rm $TMP
echo "Create $MBOOT..."
dd if=$MBOOT_TMP of=$MBOOT bs=96 count=1 2>/dev/null
dd if=$MBOOT_TMP of=$MBOOT bs=1088 skip=1 seek=1 2>/dev/null
rm $MBOOT_TMP

echo "Check integrity:"
md5sum -c $MD5SUMS