Velocity is Like OpenTable on Steroids

We all enjoy a night out with friends or our significant other from time to time. However, there is … more

Android Lollipop Lands for the Sony Xperia Z Ultra

The undisputed king of the beasts–at least in Sony’s current stable,is the … more

Android 5.0 Lollipop in 3D–EVO 3D, That Is!

It is that time of the year once again. Flowers bloom (or snow falls, depending on which … more

Gaming Console with Lollipop? Ouya Gets an Android TV Port

Android is a very flexible platform, and it can be used on a large variety of … more

Welcome to XDA

Search to go directly to your device's forum

Register an account

Unlock full posting privileges

Ask a question

No registration required
Post Reply

[HOWTO] Add init.d to stock ROM + a few other goodies

OP wd5gnr

14th July 2012, 05:49 PM   |  #1  
wd5gnr's Avatar
OP Senior Member
Houston
Thanks Meter: 116
 
444 posts
Join Date:Joined: Dec 2010
I have been resisting the urge to flash a custom ROM for a bit, but I really miss having init.d support. So I read a few threads for other phones and rolled my own.

Warnings
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.

Prerequisites
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 #):

Code:
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
Create a file called sysinit -- we are going to put it in /system/bin. You can edit it in place with vi, mount your tablet and edit it on your computer, or create it on the computer and push it via adb. Whatever.

Here's the file (you do need the # and the things after it in the file!):
Code:
#!/system/bin/sh
export PATH=/sbin:/system/sbin:/system/bin:/system/xbin
/system/bin/logwrapper /system/xbin/run-parts /system/etc/init.d
Note that if your run-parts is not in /system/xbin (from the which command) then fix the above to reflect your reality.

In the shell, make it executable
Code:
chmod 755 /system/bin/sysinit
Now go in the init.d directory and create some things you want to run at start up. For example:
Code:
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
Here's a more practical one (yes, you need the # signs). Name it something like 10diskperf -- don't forget to chmod it.
Code:
#!/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
Or here is one to tweak some TCP parameters (25sysctl):
Code:
#!/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
Whatever files you put in, you need to remember to make them executable (chmod 755).

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.


Code:
cd /system/etc
echo '#!/system/bin/sh' >install-recovery.sh
echo '/system/bin/sysinit' >>install-recovery.sh
chmod 755 install-recovery.sh
Tips and troubleshooting

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:

Code:
/system/etc/install-recovery.sh
I'd suggest putting the 99test file in first. Verify that you get the expected file in /data/tmp and then reboot and check again. Then you can remove 99test.

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:
Code:
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
For the brave
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).
Code:
cd /system/xbin     # or wherever you have it
chmod 755 install-init.d
./install-init.d
It performs rude checks to see if init.d exists, and tries to handle moving or missing busybox. It only installs 99test as a script.

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.


Scripts

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
    Code:
    #!/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;



Fin

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
Last edited by wd5gnr; 28th July 2012 at 04:32 AM.
The Following 8 Users Say Thank You to wd5gnr For This Useful Post: [ View ]
14th July 2012, 08:07 PM   |  #2  
SirRhor's Avatar
Senior Member
Flag New York
Thanks Meter: 166
 
513 posts
Join Date:Joined: Oct 2011
More
Great guide, gonna try it tonight.

Sent from a GNote, hell yeah!
15th July 2012, 06:58 PM   |  #3  
wd5gnr's Avatar
OP Senior Member
Houston
Thanks Meter: 116
 
444 posts
Join Date:Joined: Dec 2010
Quote:
Originally Posted by SirRhor

Great guide, gonna try it tonight.

Sent from a GNote, hell yeah!

I'm curious how it went. If you ran into any issues, let me know so I can update the op. Thanks!
24th July 2012, 06:45 AM   |  #4  
wd5gnr's Avatar
OP Senior Member
Houston
Thanks Meter: 116
 
444 posts
Join Date:Joined: Dec 2010
Hmm did anyone get this to work?
24th July 2012, 12:44 PM   |  #5  
aavan's Avatar
Senior Member
Flag Brussels
Thanks Meter: 6
 
153 posts
Join Date:Joined: Jan 2009
Donate to Me
More
Quote:
Originally Posted by wd5gnr

Hmm did anyone get this to work?

I did it on my Galaxy Nexus.
It works great, I had a bit of problem with the sysinit file, but when I downloaded your zip file and used your sysinit, it worked, so it must be a problem from my side

Thanks for this, I can finally use "Odex Me"
24th July 2012, 01:44 PM   |  #6  
wd5gnr's Avatar
OP Senior Member
Houston
Thanks Meter: 116
 
444 posts
Join Date:Joined: Dec 2010
Quote:
Originally Posted by aavan

I did it on my Galaxy Nexus.
It works great, I had a bit of problem with the sysinit file, but when I downloaded your zip file and used your sysinit, it worked, so it must be a problem from my side

Thanks for this, I can finally use "Odex Me"

Great, just wanted to be sure I hadn't made any typos/errors in the guide.
26th July 2012, 10:42 PM   |  #7  
wd5gnr's Avatar
OP Senior Member
Houston
Thanks Meter: 116
 
444 posts
Join Date:Joined: Dec 2010
A lot of init.d files collected here: http://forum.xda-developers.com/show....php?t=1227269

Also build.prop things, etc.
14th March 2013, 07:18 PM   |  #8  
Junior Member
Thanks Meter: 2
 
7 posts
Join Date:Joined: Mar 2013
Thanks, I use your guide and worksperfect for my RK3066 devices. Very simple to understand all steps and what we are doing to our system, perfect for me. Thanks again dude
15th March 2013, 09:46 PM   |  #9  
wd5gnr's Avatar
OP Senior Member
Houston
Thanks Meter: 116
 
444 posts
Join Date:Joined: Dec 2010
Quote:
Originally Posted by Melch1zedeK

Thanks, I use your guide and worksperfect for my RK3066 devices. Very simple to understand all steps and what we are doing to our system, perfect for me. Thanks again dude

Glad to help!
16th March 2013, 01:00 PM   |  #10  
moliverac8's Avatar
Senior Member
Flag Madrid
Thanks Meter: 64
 
621 posts
Join Date:Joined: Jul 2012
Donate to Me
More
What is thhe utility of this?

Post Reply Subscribe to Thread
Previous Thread Next Thread
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes