[Xperia Arc Android Development] iridaki:
﻿Hello!

This is -at least I hope it is- an easy to follow guide on how to unpack boot.img files (aka custom kernels) and modify the ramdisk.

Now, why would you want to do that?

First and simplest thing that comes to mind is for editing the kernel boot logo (the one that appears before the boot animation).

There are also a lot of other things you can edit in the ramdisk, but they require a bit more advanced knowledge, so we won't talk about them here.

Requirements:

1. Linux (any form will do, for example virtual box etc)

2. Perl (already included in Ubuntu, me thinks)

3. The Xperia Boot Tools package attached in this post

4. The mkbootimg binary (I already compiled it for Linux x86 and included it in the attachment)

5.

Reading this post VERY VERY VERY carefully

:D

Step 1: The mkbootimg binary

Let's install mkbootimg (we need it in order to repack the boot.img).

In a terminal window, cd to the directory where you extracted the mkbootimg file and type:

[B][I]sudo cp mkbootimg /bin/[/I][/B]

And then

[B][I]sudo chmod 755 /bin/mkbootimg[/I][/B]

Done!

* After first command, terminal will ask for your user password, type it, press enter and the command will be executed immediately.

Step 2: Splitting the boot.img

At this point, we need a boot.img file to play with.

Pick your favorite custom kernel and get the .img.

Place it in a folder along with the 2 perl scripts from the attached package.

In a terminal window, cd to the above-mentioned folder.

Next, type this command:

[B][I]perl split_bootimg.pl boot.img[/I][/B]

The command will return something like this:

Page size: 2048 (0x00000800)

Kernel size: 3132176 (0x002fcb10)

Ramdisk size: 3484496 (0x00352b50)

Second size: 0 (0x00000000)

Board name:

Command line:

Writing boot.img-kernel ... complete.

Writing boot.img-ramdisk.gz ... complete.

Now the kernel is successfully extracted to your current directory.

It consists of 2 files: boot.img-kernel and boot.img-ramdisk.gz.

Step 3: Unpacking ramdisk

So we unvealed the ramdisk in our previous step but it is still of no use to us, so we need to un-gzip and then un-cpio it.

In the same terminal window as before, type:

[I][B]mkdir ramdisk[/B]

[B]cd ramdisk[/B]

[B]gzip -dc ../boot.img-ramdisk.gz | cpio -i[/B][/I]

Last command will return something like:

10503 blocks

Our ramdisk is unpacked now in the newly created /ramdisk folder.

Step 4: Editing ramdisk files

Now you can edit the contents of the ramdisk.

BE EXTREMELY CAREFUL AND NEVER EVER DO ANYTHING "JUST 'CAUSE"... :p

You need to be fully aware of what you're doing.

Good news is, changing the logo.rle (the static boot logo image) is fairly easy.

You just need to replace it with your .rle file.

I am not going to explain how to make your own .rle files right now.

Feel free to have a look at this thread for more info.

However, I attach the stock SE boot logo in case anyone misses it when he's on custom kernel. ;)

IMPORTANT: Don't accidentally add irrelevant files to the ramdisk directory as cpio will include them too and your new boot.img will be useless.

Also, bear in mind:

Step 5: Repack the ramdisk

Now that's all done, we need to pack the kernel back up into a flashable img file.

First, we will pack the ramdisk back to it's original state.

In the same terminal window as before, type:

[B][I]find . | cpio -o -H newc | gzip > ../newramdisk.cpio.gz[/I][/B]

Step 6: Repack the boot.img

In our last step, back into the terminal we go to use the "repack-bootimg" perl script that will give us our brand new boot.img.

Make sure to cd to the directory that the perl scripts are, much like in Step 1.

Type this command:

[B][I]perl repack-bootimg.pl '/.../.../.../boot.img-kernel' '/.../.../.../ramdisk' newboot.img[/I][/B]

Of course, replace /.../.../ with the path to the boot.img-kernel file and the ramdisk directory respectively.

All done! Your new img is newboot.img and is ready to be flashed! :)

ADVICE: Use fastboot boot and not fastboot flash boot the first time, to test that the new kernel boots. If all is well, proceed with the actual flashing!

FAQ:

- Can I do this on Windows?

- Not that I know of, no. You can use Vmware or VirtualBox to install a raw Ubuntu image (pure command line) on your Windows PC though.

- Great! How can I do this then?

- Wish I knew! I have a Linux partition on my PC, it has been like that forever. Google is your friend! ;)

- This is so complicated, is there an easier way? Can you make a zip for me to use in recovery?

-

- OK, don't get upset. Can you do it for me?

- I will have to say no, because I know that the minute word gets out that I take requests, I will be overwhelmed.

Took me several hours to figure all this out but it will take you less than 10 minutes to do it yourself if you carefully follow the instructions.

- I think this or that is wrong and it should be like this or that.

- Thank you very much for correcting me! I am still learning! Please post your corrections here or PM me and I will update the thread ASAP! :)

References:

- HOWTO: Unpack, Edit, and Re-Pack Boot Images

- How to Port Android to Another Device

- [How-To] Make custom bootscreen/bootlogo (image to rle)/(rle to image)

Thanks to:

- Riyal for giving me the idea to get into this.

- pvyParts because without him I'd only be "pulling Irises"... :o :D

Cheers!