Распаковать makeself прошивку
Форум — General
Есть образ прошивки update-sd.img 300мб(C61R-0715.rar)чуть живой источник. Запускается с карты памяти когда читалка переключена в режим прошивки. Выбить с этого режима устройство не просто, тыкал сброс, совал usb , не сразу но ожила. Внутри несколько файлов, отрезал скрипт установщика.
led@debian:~$ ./update2.img --list
Target directory: .
drwxr-xr-x root/root 0 2013-07-15 14:28 ./
-rw-r--r-- root/root 5154448 2013-07-15 14:28 ./kernel.img
-rw-r--r-- root/root 29 2013-07-15 14:28 ./version
-rw-r--r-- root/root 49152 2013-07-15 14:28 ./misc.img
-rw-r--r-- root/root 47 2013-07-15 14:28 ./oem
-rw-r--r-- root/root 5743021 2013-07-15 14:28 ./recovery.img
-rwxr-xr-x root/root 404 2013-07-15 14:28 ./update-script
-rw-r--r-- root/root 543 2013-07-15 14:28 ./parameter
-rw-r--r-- root/root 2670326 2013-07-15 14:28 ./boot.img
led@debian:~$ ./update2.img --target ./2
Creating directory ./2
Verifying archive integrity... All good.
Uncompressing C60.........
not support machine.
Нужно как то достать остальные образы чтоб хоть както посмотреть на систему. Что делает update-script это скрипт makeself или самой ОС ? Если уж тут не распаковывается, может можно написать скрипт и запустить вместо update-sd.img чтоб получить доступ хотяб по wi-fi и вытащить прошивку?
Установщик.
#!/bin/sh
# This script was generated using Makeself 2.1.5
CRCsum="2400301084"
MD5="bdef1ba30d67b522b68e4db2ad5be9d0"
TMPROOT=${TMPDIR:=/tmp}
label="C60"
script="./update-script"
scriptargs=""
targetdir="."
filesizes="13629440"
keep=y
print_cmd_arg=""
if type printf > /dev/null; then
print_cmd="printf"
elif test -x /usr/ucb/echo; then
print_cmd="/usr/ucb/echo"
else
print_cmd="echo"
fi
unset CDPATH
MS_Printf()
{
$print_cmd $print_cmd_arg "$1"
}
MS_Progress()
{
while read a; do
MS_Printf .
done
}
MS_diskspace()
{
(
if test -d /usr/xpg4/bin; then
PATH=/usr/xpg4/bin:$PATH
fi
df -kP "$1" | tail -1 | awk '{print $4}'
)
}
MS_dd()
{
blocks=`expr $3 / 1024`
bytes=`expr $3 % 1024`
dd if="$1" ibs=$2 skip=1 obs=1024 conv=sync 2> /dev/null | \
{ test $blocks -gt 0 && dd ibs=1024 obs=1024 count=$blocks ; \
test $bytes -gt 0 && dd ibs=1 obs=1024 count=$bytes ; } 2> /dev/null
}
MS_Help()
{
cat << EOH >&2
Makeself version 2.1.5
1) Getting help or info about $0 :
$0 --help Print this message
$0 --info Print embedded info : title, default target directory, embedded script ...
$0 --lsm Print embedded lsm entry (or no LSM)
$0 --list Print the list of files in the archive
$0 --check Checks integrity of the archive
2) Running $0 :
$0 [options] [--] [additional arguments to embedded script]
with following options (in that order)
--confirm Ask before running embedded script
--noexec Do not run embedded script
--keep Do not erase target directory after running
the embedded script
--nox11 Do not spawn an xterm
--nochown Do not give the extracted files to the current user
--target NewDirectory Extract in NewDirectory
--tar arg1 [arg2 ...] Access the contents of the archive through the tar command
-- Following arguments will be passed to the embedded script
EOH
}
MS_Check()
{
OLD_PATH="$PATH"
PATH=${GUESS_MD5_PATH:-"$OLD_PATH:/bin:/usr/bin:/sbin:/usr/local/ssl/bin:/usr/local/bin:/opt/openssl/bin"}
MD5_ARG=""
MD5_PATH=`exec <&- 2>&-; which md5sum || type md5sum`
test -x "$MD5_PATH" || MD5_PATH=`exec <&- 2>&-; which md5 || type md5`
test -x "$MD5_PATH" || MD5_PATH=`exec <&- 2>&-; which digest || type digest`
PATH="$OLD_PATH"
MS_Printf "Verifying archive integrity..."
offset=`head -n 405 "$1" | wc -c | tr -d " "`
verb=$2
i=1
for s in $filesizes
do
crc=`echo $CRCsum | cut -d" " -f$i`
if test -x "$MD5_PATH"; then
if test `basename $MD5_PATH` = digest; then
MD5_ARG="-a md5"
fi
md5=`echo $MD5 | cut -d" " -f$i`
if test $md5 = "00000000000000000000000000000000"; then
test x$verb = xy && echo " $1 does not contain an embedded MD5 checksum." >&2
else
md5sum=`MS_dd "$1" $offset $s | eval "$MD5_PATH $MD5_ARG" | cut -b-32`;
if test "$md5sum" != "$md5"; then
echo "Error in MD5 checksums: $md5sum is different from $md5" >&2
exit 2
else
test x$verb = xy && MS_Printf " MD5 checksums are OK." >&2
fi
crc="0000000000"; verb=n
fi
fi
if test $crc = "0000000000"; then
test x$verb = xy && echo " $1 does not contain a CRC checksum." >&2
else
sum1=`MS_dd "$1" $offset $s | CMD_ENV=xpg4 cksum | awk '{print $1}'`
if test "$sum1" = "$crc"; then
test x$verb = xy && MS_Printf " CRC checksums are OK." >&2
else
echo "Error in checksums: $sum1 is different from $crc"
exit 2;
fi
fi
i=`expr $i + 1`
offset=`expr $offset + $s`
done
echo " All good."
}
UnTAR()
{
tar $1vf - 2>&1 || { echo Extraction failed. > /dev/tty; kill -15 $$; }
}
finish=true
xterm_loop=
nox11=n
copy=none
ownership=y
verbose=n
initargs="$@"
while true
do
case "$1" in
-h | --help)
MS_Help
exit 0
;;
--info)
echo Identification: "$label"
echo Target directory: "$targetdir"
echo Uncompressed size: 13324 KB
echo Compression: none
echo Date of packaging: Mon Jul 15 18:28:37 CST 2013
echo Built with Makeself version 2.1.5 on linux-gnu
echo Build command was: "/media/work/ebook/qbook/factory/assemble/China-C61R-XGA-WIFI/bin/makeself.sh \\
\"--lsm\" \\
\"lsm\" \\
\"--nocomp\" \\
\"--current\" \\
\"update/\" \\
\"update.img\" \\
\"C60\" \\
\"./update-script\""
if test x$script != x; then
echo Script run after extraction:
echo " " $script $scriptargs
fi
if test x"" = xcopy; then
echo "Archive will copy itself to a temporary location"
fi
if test x"y" = xy; then
echo "directory $targetdir is permanent"
else
echo "$targetdir will be removed after extraction"
fi
exit 0
;;
--dumpconf)
echo LABEL=\"$label\"
echo SCRIPT=\"$script\"
echo SCRIPTARGS=\"$scriptargs\"
echo archdirname=\".\"
echo KEEP=y
echo COMPRESS=none
echo filesizes=\"$filesizes\"
echo CRCsum=\"$CRCsum\"
echo MD5sum=\"$MD5\"
echo OLDUSIZE=13324
echo OLDSKIP=406
exit 0
;;
--lsm)
cat << EOLSM
system: 335544320
EOLSM
exit 0
;;
--list)
echo Target directory: $targetdir
offset=`head -n 405 "$0" | wc -c | tr -d " "`
for s in $filesizes
do
MS_dd "$0" $offset $s | eval "cat" | UnTAR t
offset=`expr $offset + $s`
done
exit 0
;;
--tar)
offset=`head -n 405 "$0" | wc -c | tr -d " "`
arg1="$2"
shift 2
for s in $filesizes
do
MS_dd "$0" $offset $s | eval "cat" | tar "$arg1" - $*
offset=`expr $offset + $s`
done
exit 0
;;
--check)
MS_Check "$0" y
exit 0
;;
--confirm)
verbose=y
shift
;;
--noexec)
script=""
shift
;;
--keep)
keep=y
shift
;;
--target)
keep=y
targetdir=${2:-.}
shift 2
;;
--nox11)
nox11=y
shift
;;
--nochown)
ownership=n
shift
;;
--xwin)
finish="echo Press Return to close this window...; read junk"
xterm_loop=1
shift
;;
--phase2)
copy=phase2
shift
;;
--)
shift
break ;;
-*)
echo Unrecognized flag : "$1" >&2
MS_Help
exit 1
;;
*)
break ;;
esac
done
case "$copy" in
copy)
tmpdir=$TMPROOT/makeself.$RANDOM.`date +"%y%m%d%H%M%S"`.$$
mkdir "$tmpdir" || {
echo "Could not create temporary directory $tmpdir" >&2
exit 1
}
SCRIPT_COPY="$tmpdir/makeself"
echo "Copying to a temporary location..." >&2
cp "$0" "$SCRIPT_COPY"
chmod +x "$SCRIPT_COPY"
cd "$TMPROOT"
exec "$SCRIPT_COPY" --phase2 -- $initargs
;;
phase2)
finish="$finish ; rm -rf `dirname $0`"
;;
esac
if test "$nox11" = "n"; then
if tty -s; then # Do we have a terminal?
:
else
if test x"$DISPLAY" != x -a x"$xterm_loop" = x; then # No, but do we have X?
if xset q > /dev/null 2>&1; then # Check for valid DISPLAY variable
GUESS_XTERMS="xterm rxvt dtterm eterm Eterm kvt konsole aterm"
for a in $GUESS_XTERMS; do
if type $a >/dev/null 2>&1; then
XTERM=$a
break
fi
done
chmod a+x $0 || echo Please add execution rights on $0
if test `echo "$0" | cut -c1` = "/"; then # Spawn a terminal!
exec $XTERM -title "$label" -e "$0" --xwin "$initargs"
else
exec $XTERM -title "$label" -e "./$0" --xwin "$initargs"
fi
fi
fi
fi
fi
if test "$targetdir" = "."; then
tmpdir="."
else
if test "$keep" = y; then
echo "Creating directory $targetdir" >&2
tmpdir="$targetdir"
dashp="-p"
else
tmpdir="$TMPROOT/selfgz$$$RANDOM"
dashp=""
fi
mkdir $dashp $tmpdir || {
echo 'Cannot create target directory' $tmpdir >&2
echo 'You should try option --target OtherDirectory' >&2
eval $finish
exit 1
}
fi
location="`pwd`"
if test x$SETUP_NOCHECK != x1; then
MS_Check "$0"
fi
offset=`head -n 405 "$0" | wc -c | tr -d " "`
if test x"$verbose" = xy; then
MS_Printf "About to extract 13324 KB in $tmpdir ... Proceed ? [Y/n] "
read yn
if test x"$yn" = xn; then
eval $finish; exit 1
fi
fi
MS_Printf "Uncompressing $label"
res=3
if test "$keep" = n; then
trap 'echo Signal caught, cleaning up >&2; cd $TMPROOT; /bin/rm -rf $tmpdir; eval $finish; exit 15' 1 2 3 15
fi
leftspace=`MS_diskspace $tmpdir`
if test $leftspace -lt 13324; then
echo
echo "Not enough space left in "`dirname $tmpdir`" ($leftspace KB) to decompress $0 (13324 KB)" >&2
if test "$keep" = n; then
echo "Consider setting TMPDIR to a directory with more free space."
fi
eval $finish; exit 1
fi
for s in $filesizes
do
if MS_dd "$0" $offset $s | eval "cat" | ( cd "$tmpdir"; UnTAR x ) | MS_Progress; then
if test x"$ownership" = xy; then
(PATH=/usr/xpg4/bin:$PATH; cd "$tmpdir"; chown -R `id -u` .; chgrp -R `id -g` .)
fi
else
echo
echo "Unable to decompress $0" >&2
eval $finish; exit 1
fi
offset=`expr $offset + $s`
done
echo
cd "$tmpdir"
res=0
if test x"$script" != x; then
if test x"$verbose" = xy; then
MS_Printf "OK to execute: $script $scriptargs $* ? [Y/n] "
read yn
if test x"$yn" = x -o x"$yn" = xy -o x"$yn" = xY; then
eval $script $scriptargs $*; res=$?;
fi
else
eval $script $scriptargs $*; res=$?
fi
if test $res -ne 0; then
test x"$verbose" = xy && echo "The program '$script' returned an error code ($res)" >&2
fi
fi
if test "$keep" = n; then
cd $TMPROOT
/bin/rm -rf $tmpdir
fi
eval $finish; exit $res
./
#!enable_script
# 在升级时显示提示信息
print "\nPlease KEEP your USB cable or DC-in connected\n"
print "Do NOT remove SD card form the device\n\n"
# 升级kernel
write_image PACKAGE:kernel KERNEL:
check_image PACKAGE:kernel KERNEL:
# 升级boot
write_image PACKAGE:boot BOOT:
check_image PACKAGE:boot BOOT:
# 升级system
write_image PACKAGE:system SYSTEM:
check_image PACKAGE:system SYSTEM:
# 升级backup
write_image PACKAGE:backup BACKUP:
check_image PACKAGE:backup BACKUP:
# 先将recovery写到/tmp/recovery.img,后继再拷贝到userdata分区
write_image PACKAGE:recovery TMP:recovery.img
check_image PACKAGE:recovery TMP:recovery.img
# 升级parameter
write_image PACKAGE:parameter PARAMETER:
check_image PACKAGE:parameter PARAMETER:
# 格式化数据分区
format DATA:
format PAGECACHE:
format SWAP:
# 拷贝recovery.img到userdata分区,在android启动时升级recovery分区
copy_file TMP:recovery.img DATA:recovery.img
check_file TMP:recovery.img DATA:recovery.img
# 写入命令,在bootloader启动时升级bootloader
write_blcmd update-bootloader
# 将bootloader存放到MISC分区
write_image PACKAGE:bootloader MISC: 0xC000
check_image PACKAGE:bootloader MISC: 0xC000
# 删除升级包
delete PACKAGE:
# 由于升级包可能存放在CACHE分区中,将该分区的格式化留最后
format CACHE:
Чтото тут спойлеры не работают.