I borrowed bits and pieces from various places. If you don't know what init.d is, you probably don't want to do this. If you aren't willing to take responsibility for bricking your tablet, don't do this. Seriously, the risk of bricking is very low, but if you aren't comfortable booting into an adb shell from recovery, maybe this is not for you. Strongly suggest a nandroid backup before you get started so if you totally bork things you can just hit rewind.
Note: The latest CWM may prompt you on a reboot that the ROM may overwrite the bootloader and offer to fix it for you. Don't do that. The init.d hack takes over the bootloader install script, but does not change your bootloader! If you accidentally do let it fix things for you, just rebuild the install-bootloader.sh file. The other steps should be fine.
First, you need root, busybox, and some sort of terminal (either adb, or some terminal you like using on the tablet).
I have found that I like Busybox Installer (from the market; https://play.google.com/store/apps/d...ybox.installer) but for some reason it doesn't create new symlinks unless you click advanced install.
Let's get to it!
In the shell (don't type # or anything after #):
su # get root mount -o remount,rw /system # get access to /system (4.04 seems to mount ro as is usual; seems like the original mounted rw) which run-parts # if you don't see /system/xbin/run-parts you need to install/reinstall busybox; if it is somewhere else, note it mkdir /system/etc/init.d
Here's the file (you do need the # and the things after it in the file!):
#!/system/bin/sh export PATH=/sbin:/system/sbin:/system/bin:/system/xbin /system/bin/logwrapper /system/xbin/run-parts /system/etc/init.d
In the shell, make it executable
chmod 755 /system/bin/sysinit
cd /system/etc/init.d echo '#!/system/bin/sh' >99test # note: you do need the first # in this line but not the 2nd! echo 'date >>/data/tmp/init.d-log.txt' >>99test chmod 755 99test
#!/system/bin/sh # Set disk read aheads to 1024 chmod 777 /sys/block/mmcblk0/queue/read_ahead_kb echo "1024" > /sys/block/mmcblk0/queue/read_ahead_kb chmod 777 /sys/block/mmcblk1/queue/read_ahead_kb echo "1024" > /sys/block/mmcblk1/queue/read_ahead_kb chmod 777 /sys/devices/virtual/bdi/179:0/read_ahead_kb echo "1024" > /sys/devices/virtual/bdi/179:0/read_ahead_kb
#!/system/bin/sh sysctl -w net.core.rmem_max=524288 sysctl -w net.core.wmem_max=524288 sysctl -w net.ipv4.tcp_rmem=6144 87380 524288 sysctl -w net.ipv4.tcp_wmem=6144 87380 524288
Finally, you need to kick it all off at start up. The hack for that is we are going to create /system/etc/install-recovery.sh which apparently runs on each boot.
cd /system/etc echo '#!/system/bin/sh' >install-recovery.sh echo '/system/bin/sysinit' >>install-recovery.sh chmod 755 install-recovery.sh
If you are too lazy to cut and paste I have the files here (init.d-support.zip) that you can just move to the right places and change permission. If you are really lazy there is lightly tested install script below.
I like to try running the whole thing before a reboot to see if I get any errors:
Same goes for adding new scripts. Try running them from the shell to see if they throw errors before you reboot!
If you have trouble, see if this looks right:
ls -ld /system/etc/install-recovery.sh /system/bin/sysinit /system/etc/init.d /system/xbin/run-parts -rwxr-xr-x root root 39 2012-07-14 10:00 install-recovery.sh -rwxr-xr-x root root 140 2012-07-14 10:01 sysinit drwxrwxrwx root root 2012-07-14 10:10 init.d lrwxrwxrwx root root 2012-07-14 09:55 run-parts -> /system/xbin/busybox
The install-init.d zip file (install-init.d.zip) contains a lightly tested script that SHOULD do the install steps for you.
Send the file to your android to someplace that can execute code (e.g., /system/xbin; I had to use adb to put it on the sdcard and then move it to /systemxbin in the shell since I don't have the adb root kernel installed).
cd /system/xbin # or wherever you have it chmod 755 install-init.d ./install-init.d
Let me know if this works or doesn't work for you.
For the extra brave: There is no reason this should only work on the Samsung. This ought to work on pretty much most stock ROMs as long as they execute install-recovery.sh on start up.
What do you put in your init.d? If you post anything cool I'll put it up here in the op.
- One that gave me some real gains in I/O performance required a new version of the tune2fs executable. By default, it is part of busybox but the busybox one only has a few simple options. I've included a stand alone version and the script 10disktune here disktune.zip. Unpack the zip and put the 10disktune in /system/etc/init.d (don't forget to chmod) and put tune2fs in /system/bin (chmod that too). Note that busybox has one in /system/xbin but the script specifically calls out the one in /system/bin.
- Here's one that will zipalign your apks on each boot
#!/system/bin/sh for apk in /data/app/*.apk ; do zipalign -c 4 $apk ZCHECK=$? if [ $ZCHECK -eq 1 ]; then zipalign -f 4 $apk /cache/$(basename $apk) if [ -e /cache/$(basename $apk) ]; then cp -p -f /cache/$(basename $apk) $apk rm /cache/$(basename $apk) fi; fi; done;
Corrections welcome. I considered using exec or . to load some of this into one shell but given that it runs once at startup, I figured it is fine as is.
All files for reference