Code:
#!/system/bin/sh
: '
overclock.sh V1.3.1
This script was designed for the Droid X and Droid 2 for use with
the overclock module developed by Tiago Sousa. The Milestone Overclock
project can be found here: http://code.google.com/p/milestone-overclock/
------------- Copyright (C) 2010 Jared Rummler (JRummy16) -------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------
'
##================
#=== Variables:
##================
SCRIPT_NAME="overclock"
SCRIPT_VERSION=1.3
AT_BOOT=0
bootTime=80s
BB=busybox
bootLocation="/system/etc/install-recovery.sh"
PAYPAL=http://bit.ly/donate_jrummy16
TWITTER=http://twitter.com/jrummy16
TWITTER2=http://twitter.com/santiemanuel
##================
#=== Functions:
##================
setVsel()
{
case $2 in
ULV) N=3 ;;
LV) N=2 ;;
SV) N=0 ;;
HV) N=-2 ;;
*) N=0 ;;
esac
case $1 in
1450000) NEWVSEL=$($BB expr 84 - $N) ;;
1400000) NEWVSEL=$($BB expr 82 - $N) ;;
1350000) NEWVSEL=$($BB expr 80 - $N) ;;
1300000) NEWVSEL=$($BB expr 76 - $N) ;;
1250000) NEWVSEL=$($BB expr 72 - $N) ;;
1200000) NEWVSEL=$($BB expr 68 - $N) ;;
1150000) NEWVSEL=$($BB expr 66 - $N) ;;
1100000) NEWVSEL=$($BB expr 64 - $N) ;;
1000000) NEWVSEL=$($BB expr 62 - $N) ;;
950000) NEWVSEL=$($BB expr 61 - $N) ;;
900000) NEWVSEL=$($BB expr 60 - $N) ;;
850000) NEWVSEL=$($BB expr 61 - $N) ;;
800000) NEWVSEL=$($BB expr 58 - $N) ;;
750000) NEWVSEL=$($BB expr 56 - $N) ;;
700000) NEWVSEL=$($BB expr 55 - $N) ;;
650000) NEWVSEL=$($BB expr 50 - $N) ;;
600000) NEWVSEL=$($BB expr 48 - $N) ;;
550000) NEWVSEL=$($BB expr 46 - $N) ;;
500000) NEWVSEL=$($BB expr 45 - $N) ;;
450000) NEWVSEL=$($BB expr 44 - $N) ;;
400000) NEWVSEL=$($BB expr 40 - $N) ;;
350000) NEWVSEL=$($BB expr 34 - $N) ;;
300000) NEWVSEL=$($BB expr 33 - $N) ;;
250000) NEWVSEL=$($BB expr 30 - $N) ;;
200000) NEWVSEL=$($BB expr 28 - $N) ;;
esac
}
setScaling()
{
if $BB [ "$9" == "custom" ]; then
VSEL1=$5 ; VSEL2=$6 ; VSEL3=$7 ; VSEL4=$8
else
setVsel $1 $VSEL_TYPE ; VSEL1=$NEWVSEL
setVsel $2 $VSEL_TYPE ; VSEL2=$NEWVSEL
setVsel $3 $VSEL_TYPE ; VSEL3=$NEWVSEL
setVsel $4 $VSEL_TYPE ; VSEL4=$NEWVSEL
fi
$BB echo $VSEL1 > /proc/overclock/max_vsel
$BB echo $1 > /proc/overclock/max_rate
$BB echo 1 `$BB expr $4 \* 1000` $VSEL4 > /proc/overclock/mpu_opps
$BB echo 2 `$BB expr $3 \* 1000` $VSEL3 > /proc/overclock/mpu_opps
$BB echo 3 `$BB expr $2 \* 1000` $VSEL2 > /proc/overclock/mpu_opps
$BB echo 4 `$BB expr $1 \* 1000` $VSEL1 > /proc/overclock/mpu_opps
$BB echo 0 $1 > /proc/overclock/freq_table
$BB echo 1 $2 > /proc/overclock/freq_table
$BB echo 2 $3 > /proc/overclock/freq_table
$BB echo 3 $4 > /proc/overclock/freq_table
setThis $1 scaling_max_freq
setThis $4 scaling_min_freq
$BB echo "Scaling frequencies set to `$BB expr $1 / 1000`, `$BB expr $2 / 1000`, `$BB expr $3 / 1000`, `$BB expr $4 / 1000` MHz!"
}
applyScaling()
{
if $BB [ $AT_BOOT -eq 1 ]; then
setBootScript
$BB sed -ie 's|\#SCALING_FREQ| |g' -ie 's|.*APPLY=.*| APPLY=1|' -ie "s|.*\#PRESET_FREQS.*| sh $0 -set $SCALING_FREQ $1 \#PRESET_FREQS|" $bootLocation
$BB echo "Set frequencies at boot complete!"
return
fi
if $BB [ -z "$1" ]; then
VSEL_TYPE=SV
elif $BB [ "$1" == "HV" ]; then
VSEL_TYPE=HV
elif $BB [ "$1" == "SV" ]; then
VSEL_TYPE=SV
elif $BB [ "$1" == "LV" ]; then
VSEL_TYPE=LV
elif $BB [ "$1" == "ULV" ]; then
VSEL_TYPE=ULV
fi
case $SCALING_FREQ in
1) setScaling 1450000 1100000 900000 400000 ;;
2) setScaling 1400000 1100000 900000 400000 ;;
3) setScaling 1350000 1100000 900000 400000 ;;
4) setScaling 1300000 1000000 900000 400000 ;;
5) setScaling 1250000 1000000 850000 400000 ;;
6) setScaling 1200000 1000000 850000 400000 ;;
7) setScaling 1150000 900000 700000 400000 ;;
8) setScaling 1100000 900000 700000 400000 ;;
9) setScaling 1000000 800000 600000 300000 ;;
10) setScaling 900000 700000 450000 300000 ;;
11) setScaling 800000 650000 450000 250000 ;;
12) setScaling 700000 550000 400000 200000 ;;
esac
}
scalingMenu()
{
# Print menu of scaling frequency options:
$BB echo "========================================"
$BB echo " Please choose your scaling frequencies"
$BB echo " from the options below:"
$BB echo
$BB echo " 1. 1450, 1100, 900, 400 MHz"
$BB echo " 2. 1400, 1100, 900, 400 MHz"
$BB echo " 3. 1350, 1100, 900, 400 MHz"
$BB echo " 4. 1300, 1000, 900, 400 MHz"
$BB echo " 5. 1250, 1000, 850, 400 MHz"
$BB echo " 6. 1200, 1000, 850, 400 MHz"
$BB echo " 7. 1150, 900, 700, 400 MHz"
$BB echo " 8. 1100, 900, 700, 400 MHz"
$BB echo " 9. 1000, 800, 500, 350 MHz"
$BB echo " 10. 900, 700, 450, 300 MHz"
$BB echo " 11. 800, 650, 450, 250 MHz"
$BB echo " 12. 700, 550, 400, 200 MHz"
$BB echo " 13. Exit this menu"
$BB echo "======================================="
$BB echo
$BB echo -n " Please enter a number: "
read SCALING_FREQ
applyScaling $1
}
atBootMenu()
{
# Print menu of frequencies at boot:
$BB echo "================================================"
$BB echo " Please choose an option to perform below:"
$BB echo
$BB echo " 1. Set Ultra Low Voltage Scaling at boot"
$BB echo " 2. Set Low Voltage Scaling at boot"
$BB echo " 3. Set Stock Voltage Scaling at boot"
$BB echo " 4. Set High Voltage Scaling at boot"
$BB echo " 5. Exit this menu"
$BB echo "================================================"
$BB echo
$BB echo -n " Please enter a number: "
read VOLTAGE_AT_BOOT
AT_BOOT=1
case $VOLTAGE_AT_BOOT in
1) scalingMenu ULV ;;
2) scalingMenu LV ;;
3) scalingMenu SV ;;
4) scalingMenu HV ;;
esac
AT_BOOT=0
}
scalingCustom()
{
$BB echo "========================================"
$BB echo " Welcome to the custom/advanced menu! "
$BB echo " This is for advanced users only! "
$BB echo
$BB echo " Instuctions: enter your frequencies in"
$BB echo " KHz and your defined vsel for each slot."
$BB echo " Slot 1 should be your lowest frequency."
$BB echo "========================================"
$BB echo
$BB echo -n " Would you like to continue? (y/n):"
read ADVANCED_CHOICE
$BB echo
case $ADVANCED_CHOICE in n|N) return ;; esac
$BB echo
$BB echo -n " Please choose your frequency for slot one: " ; read SLOT_ONE
$BB echo -n " Please choose your VSEL for slot one: " ; read VSEL_ONE
$BB echo -n " Please choose your frequency for slot two: " ; read SLOT_TWO
$BB echo -n " Please choose your VSEL for slot two: " ; read VSEL_TWO
$BB echo -n " Please choose your frequency for slot three: " ; read SLOT_THREE
$BB echo -n " Please choose your VSEL for slot three: " ; read VSEL_THREE
$BB echo -n " Please choose your frequency for slot four: " ; read SLOT_FOUR
$BB echo -n " Please choose your VSEL for slot four: " ; read VSEL_FOUR
$BB echo
$BB echo " slot 1: $SLOT_ONE, $VSEL_ONE, slot 2: $SLOT_TWO, $VSEL_TWO, "
$BB echo " slot 3: $SLOT_THREE, $VSEL_THREE, slot 4: $SLOT_FOUR, $VSEL_FOUR, "
$BB echo
$BB echo -n " Are you sure you would like to apply the above options? (y/n): "
read APPLY_CHOICE
case $APPLY_CHOICE in
y|Y) setScaling $SLOT_FOUR $SLOT_THREE $SLOT_TWO $SLOT_ONE \
$VSEL_FOUR $VSEL_THREE $VSEL_TWO $VSEL_ONE custom
;;
esac
}
setBootScript()
{
if $BB [ ! -e $bootLocation ]; then
MAKE_SCRIPT=1
elif $BB [ -z "`$BB grep "$SCRIPT_NAME" $bootLocation`" ]; then
$BB rm -f $bootLocation
MAKE_SCRIPT=1
else
MAKE_SCRIPT=0
fi
if $BB [ $MAKE_SCRIPT -eq 1 ]; then
cat >> $bootLocation << BOOT_SCRIPT
#!/system/bin/sh
#
# $SCRIPT_NAME overclock boot script
#
#SCALING_FREQ $BB sleep $bootTime
#SCALING_FREQ $BB insmod /system/lib/modules/overclock.ko omap2_clk_init_cpufreq_table_addr=0xc0048524
#SCALING_FREQ $BB echo 0xc02d4800 > /proc/overclock/cpufreq_stats_update_addr
#LAST_CHOICES APPLY=1
#SCALING_FREQ if $BB [ "\$APPLY" -eq 1 ]; then
#PRESET_FREQS sh $0 -set #PRESET_FREQS
#SCALING_FREQ else
#CUSTOM_FREQS sh $0 -setCustomScale custom
#SCALING_FREQ fi
#MAX_MIN_GOVN sh $0 -setCpu
BOOT_SCRIPT
fi
$BB chmod 755 $bootLocation
}
setThis()
{
$BB echo "$1" > /sys/devices/system/cpu/cpu0/cpufreq/$2
}
setcpu()
{
# Variables:
AVAILABLE_FREQ="/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies"
AVAILABLE_GOVERNORS="/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors"
setThis()
{
# Apply frequencies/governors:
$BB echo "$1" > /sys/devices/system/cpu/cpu0/cpufreq/$2
$BB echo "Applied: "`cat /sys/devices/system/cpu/cpu0/cpufreq/$2`""
}
printMenu()
{
# Print menu of available frequencies/governors:
LIST=1
$BB echo "======================================"
for freq in `$BB cat $1`
do
$BB echo " $LIST $freq MHz"
LIST=$(($LIST + 1))
done
$BB echo " $LIST Exit this menu"
$BB echo "======================================"
}
setFreq()
{
# Set max/min frequency from users choice:
printMenu $AVAILABLE_FREQ
$BB echo "Your current $1 freq. is: "`$BB cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_"$1"_freq`""
$BB echo
$BB echo -n "Please choose a number: "
read FREQ_CHOICE
NEW_FREQ=`$BB cat $AVAILABLE_FREQ | $BB awk -v n="$FREQ_CHOICE" '{print $n}'`
if $BB [ $FREQ_CHOICE == $LIST ]; then
return
elif $BB [ -z "$NEW_FREQ" ]; then
$BB echo "Error: Invalid choice in $FREQ_CHOICE"
return
else
# Make sure min is not greater than max:
if $BB [ $1 == "min" ]; then
if $BB [ $NEW_FREQ -gt `$BB cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq` ]; then
$BB echo "Error: Can't set minimum speed higher than maximum speed"
return
fi
# Make sure max is not less than min:
elif $BB [ $1 == "max" ]; then
if $BB [ $NEW_FREQ -lt `$BB cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq` ]; then
$BB echo "Error: Can't set maximum speed lower than minimum speed"
return
fi
fi
fi
# Set the new frequency:
setThis $NEW_FREQ scaling_"$1"_freq
}
setGov()
{
# Set the scaling governor from the users choice:
printMenu $AVAILABLE_GOVERNORS
$BB echo "Your current governor is: "`$BB cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor`""
$BB echo
$BB echo -n "Please choose a number: "
read GOV_CHOICE
NEW_GOVERNOR=`$BB cat $AVAILABLE_GOVERNORS | $BB awk -v n="$GOV_CHOICE" '{print $n}'`
if $BB [ -z "$NEW_GOVERNOR" ]; then
$BB echo "Error: Invalid choice in $GOV_CHOICE"
return
fi
setThis $NEW_GOVERNOR scaling_governor
}
cpuInfo()
{
# Print CPU info.:
$BB echo "========================================================"
$BB echo " Maximum Frequency Applied: "`$BB cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq`""
$BB echo " Maximum Frequency Available: "`$BB cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq`""
$BB echo " Minimum Frequency Applied: "`$BB cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq`""
$BB echo " Minimum Frequency Available: "`$BB cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq`""
$BB echo " Current Frequency Speed: "`$BB cat /proc/cpuinfo | $BB grep BogoMIPS | $BB awk '{print $3}'`""
$BB echo " Scaling Governor Applied: "`$BB cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor`""
$BB echo " Available Frequencies: "`$BB cat $AVAILABLE_FREQ`""
$BB echo " Scaling Governors Available: "`$BB cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors`""
$BB echo " Up Threshold Applied: "`$BB cat /sys/devices/system/cpu/cpu0/cpufreq/ondemand/up_threshold`""
$BB echo " Sampling Rate Applied: "`$BB cat /sys/devices/system/cpu/cpu0/cpufreq/ondemand/sampling_rate`""
$BB echo "========================================================"
}
EXIT=0
while $BB test $EXIT -eq 0
do
$BB echo "==========================================="
$BB echo " Please choose an option to perform below:"
$BB echo
$BB echo " 1. Set Maximum Frequency."
$BB echo " 2. Set Minimum Frequency."
$BB echo " 3. Set Scaling Governor."
$BB echo " 4. Show CPU Info."
$BB echo " 5. Exit this menu"
$BB echo "==========================================="
$BB echo
$BB echo -n "Please choose a number: "
read SETCPU
case $SETCPU in
1) setFreq max ;;
2) setFreq min ;;
3) setGov ;;
4) cpuInfo ;;
5) EXIT=1 ;;
*) $BB echo "Error: invalid option in $SETCPU" ;;
esac
done
}
amStart()
{
# Use am to start activities:
case $1 in
donate)
$BB echo "Connecting to paypal ... "
$BB echo "Donations are appreciated!"
$BB echo
$BB sleep 2
am start -a android.intent.action.VIEW -d $PAYPAL > /dev/null 2>&1
;;
jrummy)
if $BB [ -z $(pm list packages -f | $BB grep com.jrummy.droidx.overclock) ]; then
$BB echo "Error: Droid Overclock app not installed."
$BB echo "Download it from the market for \$1.50 ;)"
$BB echo -n "Would you like to check it out on the market now? (y/n): "; read getApp
case $getApp in y|Y)
am start -a android.intent.action.MAIN -n com.android.vending/.AssetBrowserActivity
sleep 2 ; input keyevent 84 ; sleep 1 ; input text com.jrummy.droidx.overclock
sleep 1 ; input keyevent 66 ; sleep 3 ; input keyevent 66 ;;
esac
else
$BB echo "Launching com.jrummy.droidx.overclock ... "
$BB echo
$BB sleep 2
am start -a android.intent.action.MAIN -n com.jrummy.droidx.overclock/com.jrummy.droidx.overclock.Overclock > /dev/null 2>&1
fi
;;
twitter)
$BB echo "Connecting to twitter ... "
$BB echo
$BB sleep 2
am start -a android.intent.action.VIEW -d $TWITTER > /dev/null 2>&1
;;
twitter2)
$BB echo "Connecting to twitter ... "
$BB echo
$BB sleep 2
am start -a android.intent.action.VIEW -d $TWITTER2 > /dev/null 2>&1
;;
esac
}
##================
#=== Main Script:
##================
if /system/xbin/busybox > /dev/nul 2>&1; then
BB=/system/xbin/busybox
elif /system/bin/busybox > /dev/nul 2>&1; then
BB=/system/bin/busybox
else
echo "Error: Busybox not found!"
exit
fi
$BB mount -o remount,rw -t yaffs2 `$BB grep " /system " "/proc/mounts" | $BB cut -d ' ' -f1` /system > /dev/nul 2>&1
if $BB [ ! -d /proc/overclock ]; then
if $BB [ ! -e /system/lib/modules/overclock.ko ]; then
echo "Error: overclock module not found."
echo "Please install the module and try again."
exit
fi
insmod /system/lib/modules/overclock.ko omap2_clk_init_cpufreq_table_addr=0xc0048524
echo 0xc02d4800 > /proc/overclock/cpufreq_stats_update_addr
fi
if $BB [ ! -d /proc/overclock ]; then
echo "Error: the overclock module failed to load."
exit
fi
case $1 in
-set)
SCALING_FREQ=$2
applyScaling $3
return
;;
-atboot)
AT_BOOT=1
SCALING_FREQ=$2
applyScaling $3
return
;;
-setCustomScale)
setScaling $2 $3 $4 $5 $6 $7 $8 $9 custom
case "$10" in
true)
setBootScript
$BB sed -ie 's|\#SCALING_FREQ| |g' -ie 's|.*APPLY=.*| APPLY=2|' -ie "s|.*-setCustomScale.*| sh $0 -setCustomScale $2 $3 $4 $5 $6 $7 $8 $9 custom|" $bootLocation
;;
esac
return
;;
-setCpu)
setThis $2 scaling_min_freq
setThis $3 scaling_max_freq
setThis $4 scaling_governor
return
if $BB [ "$5" = "-atboot" ]; then
setBootScript
$BB sed -i '|.*-setCpu.*| sh $0 -setCpu $2 $3 $4|' $bootLocation
fi
;;
-getVoltage)
SLOT=0;
for vsel in `$BB cat proc/overclock/mpu_opps | $BB sed 's|.*vsel=||' | $BB awk '{print $1}'`
do
SLOT=$(($SLOT+1))
$BB echo -n "$vsel"
if $BB [ "$SLOT" -ne "4" ]; then
$BB echo -n " "
fi
done
return
;;
-getSteps)
cat /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state | $BB cut -d ' ' -f1
return
;;
-makeScript)
setBootScript
return
;;
esac
# Print initial information about the script:
if $BB [ ! -e /system/etc/.jrummy.overclock.script -o "$1" == "-help" ]; then
$BB echo " Welcome to JRummy's OC script! If you haven't"
$BB echo " already, check out Droid Overclock app on the"
$BB echo " market ;)"
$BB echo
$BB echo " If you choose to continue you will be taken to"
$BB echo " a menu of options to overclock your Droid X. To"
$BB echo " setup your frequencies you wish to overclock to,"
$BB echo " choose a scaling menu option (scaling options: "
$BB echo " ultra low voltage, low voltage, stock voltage, "
$BB echo " high voltage)."
$BB echo
$BB echo " To set the actual frequencies you can either "
$BB echo " download Droid Overclock from the market or"
$BB echo " use option 6 and do it via this script."
$BB echo
$BB echo " Credits:"
$BB echo " JRummy16: For this script"
$BB echo " Tiago Sousa: The Milestone Overclock Project"
$BB echo " nadlabak: For patching in Froyo/2.2 Support"
$BB echo " FreeWELL: Finding DroidX 2.2 locations/module"
$BB echo
$BB echo " Warning: Overclocking your device may have"
$BB echo " adverse affects on your device. You only are"
$BB echo " responsible for any damages that might occur,"
$BB echo " so use this at your own risk!"
$BB echo " on boot option removed because incompatibility"
$BB echo
$BB echo -n " Do you wish to continue to the main menu? (y/n):"
read CONTINUE
case $CONTINUE in n|N) exit $? ;; esac
$BB touch /system/etc/.jrummy.overclock.script
fi
# Print main menu of options:
EXIT_MAIN=0
while $BB test $EXIT_MAIN -eq 0
do
$BB echo
$BB echo "============================================"
$BB echo " Welcome to JRummy's overclock script!"
$BB echo "--------------------------------------------"
$BB echo " Please choose an option to perform below:"
$BB echo
$BB echo " 1. Set Ultra Low Voltage Scaling"
$BB echo " 2. Set Low Voltage Scaling"
$BB echo " 3. Set Stock Voltage Scaling"
$BB echo " 4. Set High Voltage Scaling"
$BB echo " 5. Set custom scaling (advanced)"
$BB echo " 6. Set CPU Frequencies & Governors"
$BB echo " 7. Follow JRummy16 on Twitter"
$BB echo " 8. Follow santiemanuel on Twitter"
$BB echo " 9. Donate to JRummy16 ;)"
$BB echo " 10. Exit this menu"
$BB echo "============================================"
$BB echo
$BB echo -n " Please enter a number: "
read MAIN_CHOICE
case $MAIN_CHOICE in
1) scalingMenu ULV ;;
2) scalingMenu LV ;;
3) scalingMenu SV ;;
4) scalingMenu HV ;;
5) scalingCustom ;;
6) setcpu ;;
7) amStart twitter ;; # :p
8) amStart twitter2 ;;
9) amStart donate ;; # :p
10) EXIT_MAIN=1 ;;
esac
done
# Clean up:
$BB echo
$BB echo "Thanks for using $($BB basename $0) $VERSION by JRummy16!"
$BB mount -o remount,ro -t yaffs2 `$BB grep " /system " "/proc/mounts" | $BB cut -d ' ' -f1` /system > /dev/null 2>&1
sync
Bookmarks