View Single Post
knuthf's Avatar
Posts: 74 | Thanked: 42 times | Joined on Apr 2011 @ Oslo - around
#5
Make a directory for flashing - download the flasher here and install it.
Make then 2 directories: "emmc" and "os".

The "Flashing" script is:
#!/bin/bash


FLASHER_DPKG=dpkg/maemo_flasher-3.5_2.5.2.2_i386.deb
FLASHER_NAME=flasher

stage() {
printf "%s\n%.${#1}s\n\n" "$1" "${1//?/${2:--}}"
}



menu_main() {
local Options=( "R&D Mode" "Flash OS" "Flash eMMC" "Exit" )
local item=

while [[ $item != Exit ]] ; do
stage "Main Menu" =
select item in "${Options[@]}" ; do
printf "\n\n\n"
case "$item" in
R\&D\ Mode)
menu_randd
;;
Flash\ OS)
menu_flash "OS" os
;;
Flash\ eMMC)
menu_flash "eMMC" emmc
;;
esac
break
done
done
return 0
}


RunReport() {
local r= j=
printf "\n\n\nExecuting: $*\n"
# if stage "$*" "*" ; then
if "$@" ; then
printf "Completed sucessfully\n\n"
r=0
else
r=$?
printf "Returned error: $r\n\n"
fi
echo "Press enter to continue"
read j
printf "\n"
return $r
}


menu_randd() {
local item=
local Options=( "Query R&D Mode" "Enable R&D Mode" "Disable R&D Mode" "Back" )
local item=

while [[ $item != Back ]] ; do
stage "R&D Mode menu" =
select item in "${Options[@]}" ; do
printf "\n\n\n"
case "$item" in
Query*)
RunReport "$FLASHER_BIN" --query-rd-mode
;;
Enable*)
RunReport "$FLASHER_BIN" --eanble-rd-mode
;;
Disable*)
RunReport "$FLASHER_BIN" --disable-rd-mode
;;
esac
break
done
done
return 0
}

menu_flash() {

local item=
local Options=( "Select Flash image" "Change reboot mode" "Start" "Back" )
local image=
local reboot=-R

while [[ $item != Back ]] ; do
stage "Flash $1 Menu" =
if [[ -r "$image" && -f "$image" ]] ; then
echo " Image to be flashed: $image"
else
echo "***Select image to be flashed***"
fi
if [[ -n $reboot ]] ; then
echo "Reboot after flashing: YES"
else
echo "Reboot after flashing: NO"
fi
echo ""
select item in "${Options[@]}" ; do
printf "\n\n"
case "$item" in
Select*)
PickImage "$1" "$2" image
;;
Change*)
if [[ -n $reboot ]] ; then
reboot=
else
reboot=-R
fi
;;
Start)
if [[ -r $image ]] ; then
RunReport "$FLASHER_BIN" -F "$image" -f $reboot
fi
;;
esac
break
done
done
return 0
}


PickImage() {
local item=
local -a OptionsFiles=( $2/* )
local -a Options=( )
local i

for i in "${OptionsFiles[@]}" ; do
if [[ -r $i && -f $i ]] ; then
Options=( "${Options[@]}" "Image: $i" )
fi
done

if [ ${#Options[@]} -eq 0 ]
then
echo "No valid images found"
return 1
fi
Options=( "${Options[@]}" "Abort" )
stage "Select $1 flash image"

select item in "${Options[@]}" ; do
if [[ $item = Abort ]] ; then
return 1
fi
item="${item#Image: }"
eval "$3=\"\$item\""
return 0
done
}

PickDPKG() {
local item=
local name="$1"
shift
local -a OptionsFiles=( "$@" )
local -a Options=( )
local i

for i in "${OptionsFiles[@]}" ; do
if [[ -r $i && -f $i ]] ; then
Options=( "${Options[@]}" "Image: $i" )
fi
done

case "${#Options[@]}" in
0)
echo "No valid package files was found"
return 1
;;
1)
item="${Options[0]}"
item="${item#Image: }"
eval "$name=\"\$item\""
return 0

;;
*)
Options=( "${Options[@]}" "Abort" )
stage "Select the flasher package"

select item in "${Options[@]}" ; do
if [[ $item = Abort ]] ; then
return 1
fi
item="${item#Image: }"
eval "$name=\"\$item\""
return 0
done
;;
esac
}

if [ "Linux" = "`uname -s`" ] ; then
stage "Stage 1: Install flasher"

if FLASHER_BIN="`type -P "$FLASHER_NAME"`" ; then
echo "Flasher already installed"
else
if ! PickDPKG FLASHER_DPKG deb/*deb dpkg/*deb ; then
echo "Cannot find flasher package. Please download and put into deb directory"
exit 1
fi

echo "About to install flasher from: $FLASHER_DPKG"
echo "Press enter to continue"
read a
if ! dpkg -i "$FLASHER_DPKG" ; then
echo "Failed to install flasher"
exit 1
fi
hash -r
FLASHER_BIN="`type -P "$FLASHER_NAME"`"
fi

if [[ ! -x "$FLASHER_BIN" ]]; then
echo "Cannot find flasher binary. not in path"
exit 1
fi

echo "Patching flasher: $FLASHER_BIN"
if ! perl -pi -e 's-/proc/bus/usb-/dev/bus/usb\000-;' -i.backup "$FLASHER_BIN" ; then
echo "Failed to patch flasher"
exit 1
fi

stage "Stage 2: Remove phonet modules"
echo "Unloading module"
modprobe -r cdc_phonet
modprobe -r phonet
echo "Checking module"
if lsmod | egrep "phonet|cdc_phonet" > /dev/null ; then
echo "Failed to remove module. Module still present"
exit 1
fi
echo "Blacklisting modules"
echo "blacklist cdc_phonet
blacklist phonet" > /etc/modprobe.d/blacklist-phonet.conf
else
FLASHER_BIN="`type -P "$FLASHER_NAME"`"
if [[ ! -x "$FLASHER_BIN" ]]; then
echo "Cannot find flasher binary. It must be installed before running"
echo "this script."
exit 1
fi
fi


menu_main

 

The Following User Says Thank You to knuthf For This Useful Post: