Skinny Pro Custom Boot Images

1,425 posts
Thanks Meter: 1,615
By jajk, Senior Member on 30th March 2016, 04:35 AM
Post Reply Email Thread
What is Skinny Pro?

This is not for NOOBS - it breaks functionality in Xiaomi apps that try to communicate back to head office. This is an intentional feature and is for people who are not interested in being part of the Xiaomi ecosphere. LEAVE NOW if you have, or intend to log on to Xiaomi and use their services!!!!
Skinny does not magically fix poor choice of ROMs, Apps or lack of knowledge.

It is not a custom Kernel - it is a custom boot.img containing modified initialization scripts for the stock kernel.

There are 2 distinct versions:
Based on - Use for 7.1.xx to 7.3.20 (MIUI7) Support discontinued since V7 (O.P no longer applies to this version)
Based on MIUI8 - use for MIUI7.5.x and MIUI8

Design Brief:
No Placebos
To overcome the limitations of Stock MIUI being:
Poor battery life
Poor performance
Chronic invasion of privacy

Boot.img mods:
Disable starting of non-present devices and services
Disable stock recovery overwriting TWRP
Disable OTA services (no use on a modified ROM)
Disable starting of invasive (spying) services
Disable fingerprint sensor infrastructure (not for our device)
Disable find device infrastructure
Disable second space infrastructure
Build in init.d support
Enable zram swap creation (disable conflicting "mcd" service infrastructure)
Mass Storage Device mode added for external SDCard
Improved TCP Buffer values
Reconfigured internal SDCard suppport to remove uneccessary symlinks
Reduce cpu scheduler, foreground and background tasks deadtime (throttling)
Add some Android 6.0 TCP tweaks
Expose LMK and HPS settings for user configuration

What you will see:
Faster boot
Less background activity at idle
Less RAM usage
Less spying/reporting activity
Better battery life
Better Performance
More reliable and faster data speeds

Install your chosen ROM and get it past the first setup screens before flashing a Skinny Boot image.
If you really must install Xposed, install this after the Skinny boot image.
Do not install "kernel" tweaking apps - they will conflict with the inherent settings in Skinny!
No wipes are necessary after installing the boot.img

What else do I need to do?
First, an explanation as to why we need to set everything the way it is:
The cpu is controlled by 4 separate mechanisms:
1. Thermal throttling - will limit frequencies and shut down cores to stay within safe operating temperatures - will override all other mechanisms. Settings available: High Performance (less strict) or Balanced (default)
2. Performance Server - will temporarily boost freqs and cores depending on detected conditions such as screen touch, screen update or rotate, app open. Limited settings available via /etc/perfservscntbl.txt
3. Hotplugging Service - will add or remove cpu cores as load requires. Some settings are accessible through /proc/hps/
4. Interactive Governor - will throttle freqs up and down based on load and add or remove cores also. Some settings are accessible through /sys/devices/system/cpu/cpufreq/interactive/

You will notice there are competing and often contradicting mechanisms. The factory defaults essentially disable the Interactive governor as being the primary source of initial boosting cpu freqs. The "boost" setting normally found in the governor is non-functional - instead, the Perf Server will boost to 2 cores @ 1183MHz when a potential demand for processing power is detected apart from a simple screen touch. The interactive governor will take over scaling the freq and number of cores after the perf server boost period expires or load demands more cpu power than the boost caters for.

Since the Performance Server tends to over-react, setting 2 cores @ 1183MHz for the smallest of events, we disable it completely by manually editing the existing line in /system/build.prop from:
ro.mtk_perfservice_support=1 to ro.mtk_perfservice_support=0
You must do this yourself - this is vital since all further Governor and Hotplug settings rely upon it being disabled.
Editing /etc/perfservscntbl.txt is not required since this file will no longer be processed.

The settings for the Interactive Governor and Hotplug are modified from factory default to correct a couple of serious problems:
1. The cpu will not reliably throttle back to idle at 403MHz. This has a huge impact on battery.
This is caused by the timer_rate setting being too short allowing transient background activities to trigger scaling the freq up. Increasing the time effectively averages out the transient load spikes so the cpu will not break idle unnecessarily.
2. The cpu does not respond to increasing or decreasing load fast enough creating micro-lags and consuming battery. Reducing the min_sample_time will shorten the time taken for the cpu to lower in freq when load drops off. Reducing the above_hispeed_delay will reduce the response time to increase the cpu freq in response to a load. Both of these settings also compensate for the longer than standard timer_rate that introduces some sluggishness by necessity.
All other values are set to encourage the frequency and number of cores to rapidly and reliably return to idle to save battery while still providing sufficient responsiveness to sudden load demands.

Create an init.d script exactly as follows: (premade file 01_init also available to download)


### CPU freqs standard RN2: 403000, 806000, 1183000, 1326000, 1469000, 1625000, 1781000, 1950000
### CPU freqs PRIME RN2:    403000, 806000, 1183000, 1326000, 1482000, 1664000, 1885000, 2158000
### GPU freqs standard RN2: 253500, 299000, 390000, 442000, 546000
### GPU freqs PRIME RN2:    253500, 338000, 390000, 546000, 676000

# Stop running boot-time services (enable the lines for services you want to stop)
#stop sn                # USB serial number allocation
#stop wifi2agps         # WiFi assisted GPS (for fine location)
#stop agpsd             # Mobile Network assisted GPS (for fine locastion)
#stop emsvr_user        # Engineering Mode server
#stop PPLAgent          # Privacy Protection Lock
#stop mtkbt             # MTK Bluetooth
#stop batterywarning    # Battery warning service
#stop debuggerd64       # debug logging
#stop debuggerd         # debug logging
#stop logd              # logging
#stop autokd            # autotune for WiFi

#Set to permissive (enable this line if SE permissive mode is required)
# setenforce 0

# Tweak Interactive Governor (now set in boot.img - enable here to override values)
#echo 403000 > /sys/devices/system/cpu/cpufreq/interactive/hispeed_freq        # factory default 1183000
#echo 99 > /sys/devices/system/cpu/cpufreq/interactive/go_hispeed_load         # factory default 99
#echo 99 > /sys/devices/system/cpu/cpufreq/interactive/target_loads            # factory default 90
#echo 25000 > /sys/devices/system/cpu/cpufreq/interactive/timer_rate           # factory default 20000
#echo 10000 > /sys/devices/system/cpu/cpufreq/interactive/min_sample_time      # factory default 20000
#echo 5000 > /sys/devices/system/cpu/cpufreq/interactive/above_hispeed_delay   # factory default 20000
#echo 40000 > /sys/devices/system/cpu/cpufreq/interactive/timer_slack          # factory default 80000

# Limit CPU max freqs (To limit the maximum cpu freq, enable both of these lines. Select a valid freq for your device from table at start)
#echo 1781000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
#echo 1781000 > /proc/cpufreq/cpufreq_limited_max_freq_by_user

# Limit foreground CPU cores (set in boot.img - enable here to override values) 0-1 min, 0-7 max Example shows 5 cores (also needs to be set in Hotplug)
#echo 0-4 > /dev/cpuset/foreground/cpus

# Hotplug settings (set in boot.img - enable here to override values) Note: num_limit values are 1-8
#echo 5 > /proc/hps/num_limit_low_battery          # factory default 8
#echo 5 > /proc/hps/num_limit_power_serv           # factory default 8
#echo 5 > /proc/hps/num_limit_thermal              # factory default 8
#echo 5 > /proc/hps/num_limit_ultra_power_saving   # factory default 8
#echo 99 > /proc/hps/up_threshold                  # factory default 95
#echo 87 > /proc/hps/down_threshold                # factory default 85
#echo 0 > /proc/hps/rush_boost_enabled             # factory default 1
#echo 0 > /proc/hps/input_boost_enabled            # factory default 1

# Tweak GPU Settings (Look in /proc/gpufreq/gpufreq_power_dump for power usage at different freqs)
    # To disable GPU touch boost:
#echo 0 > /proc/gpufreq/gpufreq_input_boost        # factory default 1 (enabled)
    # To limit max GPU freq: (Select a valid freq for your device from table at start)
#echo 442000 > /proc/gpufreq/gpufreq_opp_max_freq  # factory default 0 (disabled) 

# Tweak VM (set in boot.img - enable here to override values)
#echo 300 > /proc/sys/vm/dirty_expire_centisecs    # factory default 200
#echo 500 > /proc/sys/vm/dirty_writeback_centisecs # factory default 300

# Tweak LMK (set in boot.img - enable here to override values) 18 37 56 75 93 112MB   # factory default 72 90 108 126 219 317MB (MB x 256 = value)
#echo 4608,9472,14336,19200,23808,28672 > /sys/module/lowmemorykiller/parameters/minfree

#Enable zram (no zram set by default, enable  first 4 lines if 1 zram required, all 7 lines if 2 zram required)
#echo 40 > /proc/sys/vm/swappiness
#echo 268435456 > /sys/block/zram0/disksize     # for single zram: 536870912 = 512MB (for non-prime version) 1073741824=1GB (for prime version)
#/system/xbin/busybox mkswap /dev/block/zram0
#/system/xbin/busybox swapon /dev/block/zram0
#echo 268435456 > /sys/block/zram1/disksize     # for 2 zrams: 268435456 = 256MB (for non-prime version) 536870912 = 512MB (for prime version)
#/system/xbin/busybox mkswap /dev/block/zram1
#/system/xbin/busybox swapon /dev/block/zram1

# Tweak IO Scheduler (set in boot.img - enable here to override values)
#echo deadline > /sys/block/mmcblk0/queue/scheduler    # factory default cfq (choice: noop deadline cfq)
#echo 128 > /sys/block/mmcblk0/queue/read_ahead_kb     # factory default 128 Choose between 128, 256, 512, 1024, 2048
#echo 0 > /sys/block/mmcblk0/queue/add_random          # factory default 1
#echo 0 > /sys/block/mmcblk0/queue/iostats             # factory default 1
#echo deadline > /sys/block/mmcblk1/queue/scheduler    # for ext sdcard (sdcard1)
#echo 2048 > /sys/block/mmcblk1/queue/read_ahead_kb     # for ext sdcard (sdcard1)
#echo 0 > /sys/block/mmcblk1/queue/add_random          # for ext sdcard (sdcard1)
#echo 0 > /sys/block/mmcblk1/queue/iostats             # for ext sdcard (sdcard1)

#Tweak Entropy (set in boot.img - enable here to override values)
#echo 384 > /proc/sys/kernel/random/read_wakeup_threshold    # factory default 64
#echo 448 > /proc/sys/kernel/random/write_wakeup_threshold   # factory default 128

#Tweak for wifi router connection issues
#echo 1 > /proc/sys/net/ipv6/conf/wlan0/disable_ipv6

# Disable debugging on some modules (set in boot.img - enable here to override values)
#echo 0 > /sys/module/alarm_dev/parameters/debug_mask;
#echo 0 > /sys/module/alarmtimer/parameters/debug_mask;
#echo 0 > /sys/module/binder/parameters/debug_mask;
#echo 0 > /sys/module/earlysuspend/parameters/debug_mask;
#echo 0 > /sys/module/sbsuspend/parameters/sbsuspend_debug_mask;
#echo 0 > /sys/module/snd/parameters/debug;
#echo 0 > /sys/module/pvrsrvkm/parameters/gPVRDebugLevel;
#echo 0 > /sys/module/musb_hdrc/parameters/debug_level;
#echo 0 > /sys/module/lowmemorykiller/parameters/debug_level;

busybox fstrim /data
busybox fstrim /system
busybox fstrim /cache
Update BusyBox to version 1.25.1-1 (available to download)

Reduce the number of apps and services needlessly starting automatically at boot. Uninstall or freeze bloat apps. Replace "noisy" apps with better written ones.
Use BetterBatteryStats, WakelockDetector Root or similar to understand what invisible activities are consuming battery.
Use SDMaid, DisableServices, MyAndroidTools or similar to disable autostarts (receivers)and app related services. Use with caution.

To see what boot services are running, type getprop in Terminal. You will see a bunch of entries like [init.svc.66xx_launcher]: [running]
These service must remain running do not stop!:
[init.svc.66xx_launcher]: [running]
[init.svc.MtkCodecService]: [running]
[init.svc.NvRAMAgent]: [running]
[init.svc.aal]: [running]
[init.svc.ccci_fsd]: [running]
[init.svc.ccci_mdinit]: [running]
[init.svc.drm]: [running]
[init.svc.fuelgauged]: [running]
[init.svc.gsm0710muxd]: [running]
[init.svc.guiext-server]: [running]
[init.svc.healthd]: [running]
[init.svc.installd]: [running]
[init.svc.keystore]: [running]
[init.svc.lmkd]: [running]
[]: [running]
[init.svc.mnld]: [running]
[init.svc.netd]: [running]
[]: [running]
[init.svc.sdcard]: [running]
[init.svc.servicemanager]: [running]
[init.svc.shelld]: [running]
[init.svc.surfaceflinger]: [running]
[init.svc.thermal]: [running]
[init.svc.thermald]: [running]
[init.svc.ueventd]: [running]
[init.svc.vold]: [running]
[init.svc.zygote]: [running]
[init.svc.zygote_secondary]: [running]
[init.svc.bmi160d]: [running]
If you only have 1 SIM, it is highly recommended to go into single SIM mode to turn off the second modem service. Edit build.prop existing line from: to

Turn off Developer Options/Memory Optimization and MIUI Optimization. This is a legacy of the mcd service zram configuration that is disabled.

Removal of Apps that are created by symlinks: (Updated information for any ROM version can be found in ROM \META-INF\com\google\android\updater-script)
Uninstall the app where possible and then delete the leftover libs if they exist.


MIUI Video



Sogou Input

AMAP Network Location




Miui Gallery

MIUI Scanner
Remove inbuilt virus scanner(s)
Remove GuardProvider.apk and SecurityAdd.apk plus:
Extra libs that can be removed: (if associated apps are removed)
Lib:                             Find Device                         Find Device                  Music / MIUIVideo                 Voice Extensions             Voice Extensions                Music / MIUIVideo              Music / MIUIVideo

Lib64:                             Find Device                         Find Device               Google Keyboard     Stock Keyboard                 Print Spooler                        Pico TTS                          Pico TTS

Skinny Pro All versions:
The Following 43 Users Say Thank You to jajk For This Useful Post: [ View ] Gift jajk Ad-Free
30th March 2016, 04:52 AM |#2  
Sleepy_Augie's Avatar
Senior Member
Thanks Meter: 7
@jajk Awesome work! Do you intend to work on the aosp boot.img much or are you more invested in the miui one (or is it mostly the same project with not many differences between the two types)?
The Following User Says Thank You to Sleepy_Augie For This Useful Post: [ View ] Gift Sleepy_Augie Ad-Free
30th March 2016, 07:29 AM |#3  
OP Senior Member
Thanks Meter: 1,615
@Sleepy_Augie There is little difference between the 2 flavors so it is easy to keep them in sync

I cannot possibly know what customization other devs are adding to their boot.imgs and whether or not that will make their ROMs incompatible with my boot.imgs. I will try to keep the AOSP version up with current developments while still keeping it "Generic".
The Following 2 Users Say Thank You to jajk For This Useful Post: [ View ] Gift jajk Ad-Free
30th March 2016, 08:26 AM |#4  
Flag Vitebsk
Thanks Meter: 2
Could you include Selinux: Permissive? Zram is better than swap built-in miui ?
30th March 2016, 01:02 PM |#5  
OP Senior Member
Thanks Meter: 1,615
@efr07 The beauty of not embedding tweaks - you can choose to be permissive or enforcing in your init.d script rather than me dictating it to all.
setenforce=0 or 1

and to answer the second part....
MIUI uses what could be called a "dynamic swap" system utilizing 4 zram swaps of variable size. The system prioritizes what gets access to that extra memory and what doesn't. No surprises - Xiaomi apps get priority over your own apps. The complexity of this system is so great, it would negate any performance advantage completely but it does make the Xiaomi apps more tenacious than other apps.
The Following 4 Users Say Thank You to jajk For This Useful Post: [ View ] Gift jajk Ad-Free
30th March 2016, 01:30 PM |#6  
Junior Member
Thanks Meter: 0
First things first thank you so much for the effort you have done improving Redmi Note 2,
But I have some question if you please,
I have Miui Lite on my Redmi Note 2 Prime (2.2 ghz) (Rom Link
I have flashed the file as img to boot, and I have done as you said until the int.d thing, I went to #/system/bin/ and I found sh file and opened it in text editor, deleted everything in it and paste what you mentioned, till now we are ok with the device.
I did not find the files that you said I should delete from /vendor/lib, so I went to /vendor/lib64 and deleted the first file, After I deleted it suddenly Root Explorer shut off and whenever I open it again I cant find anything, just blank screen with its symbol and name above and nothing else. Tried to delete Root Explorer and install again and nothing new. Please help, Have I done everything okay? and what should I do to fix this thing and continue deleting the remaining files?
Thank you.
30th March 2016, 01:35 PM |#7  
tonydeli7's Avatar
Senior Member
Flag Greece
Thanks Meter: 19
@jajk delete folder /system/etc/radv <- do you mean radvd?
30th March 2016, 01:56 PM |#8  
OP Senior Member
Thanks Meter: 1,615
@aghr11 I think that you did not understand the method to create the init.d script and modified an important file instead. You will have to replace that script file you blanked with the original or restore from a good backup and try again. The list of files for deletion is only if they exist in the location as described. If you have enabled any fingerprint settings for some obscure reason, you will probably get locked out of your phone.
Now to creating the script.
Using a text editor, create a file named 01tweaks in /system/etc/init.d folder.
Paste the text (including the first line #!/system/bin/sh) into this file. Leave a blank line at the bottom of the file and make sure your editor is set to Unix end-of-line characters (not Windows)
Save the file and give it 0755 permissions (rwxr-xr-x)

@tonydeli7 Yes, typo I will fix..... done It is a folder to receive advertising pushed to your phone courtesy of Xiaomi!!!!
The Following 4 Users Say Thank You to jajk For This Useful Post: [ View ] Gift jajk Ad-Free
30th March 2016, 03:33 PM |#9  
tonydeli7's Avatar
Senior Member
Flag Greece
Thanks Meter: 19
Originally Posted by jajk

@tonydeli7 Yes, typo I will fix..... done It is a folder to receive advertising pushed to your phone courtesy of Xiaomi!!!!

Yeap, just saw the conf file... WTF are they doing?!

By the way, thanks a lot for this kernel! Nice work!

I edited the latest Multirom Stable ( and added your kernel&tweaks,deleted the files and everything works great!
I only changed the touchboost value to 806000
30th March 2016, 06:22 PM |#10  
Junior Member
Flag Thessaloniki
Thanks Meter: 2
jajk, many thanks for this brilliant work!

IIRC, your personal preference for a base ROM with the best behavior and performance with these tweaks was v7.1.4.0 (or was it Is this so or has anything changed? My RN2p is long overdue for an update, still on dev 5.10.29!
30th March 2016, 10:28 PM |#11  
Flag Guadalajara
Thanks Meter: 12
If a have a weekly miui based on Miui V 7.3 beta, will it work?
Post Reply Subscribe to Thread

Guest Quick Reply (no urls or BBcode)
Previous Thread Next Thread
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes