[LG Optimus 2x] spyrosk:
P990 ROM Converter

from New BootLoader to Old and vice versa​

Actually this tool is Tonyp’s idea. All credits to him.

He asked me if I am interested in making a script and automating the rom porting from one bootloader to the other and he assisted me with all the changes that need to be done.

Due to different EOL (end of line) termination in text files between UNIX-Linux (LF) and windows (CRLF), I had to make bash (linux) scripts necessarily. The good thing is that the tool can be used in both windows and linux systems.
​

Installation:

Download and extract the attached ROM-Converter-tools.zip package anywhere you like.

Download and extract in the same folder, a newer ROM-Converter-scripts.zip if exists.

For Windows systems only:

Install Cygwin following the instructions below:

Download setup-x86.exe from here http://cygwin.com/install.html

Attention!! Even if you are running x64 windows system install the x86 version. DO NOT install the x64 cygwin version because two binaries (mkbootfs.exe & mkbootimg.exe used to pack boot.img do not work properly).

Run the setup-x86.exe, when the list of packages is shown make sure you add the following:

Expand

Archive

and select zip & unzip to be installed

Expand

Utils

and select cpio to be installed

Expand

Perl

and select ‘perl: Larry Wall’s Practical..’ and perl_vendor to be installed

(If you are already using cygwin run setup again and add the above packages to be installed.)

For Linux systems only:

Download the attached linux-mkboot-binaries.zip (mkbootfs, mkbootimg), extract them in tool folder and remove the windows ones (mkbootfs.exe, mkbootimg.exe).
​

How to use it:

Put the source ROM.zip(s) in the 'source_zips' folder (otherwise you’ll be prompted to drag n’ drop it in terminal)

Open Cygwin. Type cd (leave a space after cd) and type /cygdrive/c/dir1/dir2/../ROM-Converter-tools

where “c/dir1/dir2/../ROM-Converter-tools” is the full path of the folder you extracted the convert-tool package (e.g C:\dir1\dir2\..\ROM-Converter-tools) and press enter.

In case of long pathname, instead of typing the whole of it, use one of the following tips to easily change to tool's path.

Tip#1: After you type cd , drag n’ drop from windows explorer into cygwin terminal, the folder "ROM-Converter-tools" and it wiil automatically be converted to ‘/cygdrive/c/dir1/dir2/../ROM-Converter-tools’ press enter and that’s it.

Tip#2: After cd /cygdrive/c/ type the 1st one or two letters of the next subdir and autocomplete it's name with TAB.

Type one of these commands in cygwin terminal:

./convert_rom.sh -stepmode #--> starts in step-mode for debugging purposes
./convert_rom.sh #--> runs unattended (with no pauses).

​

What it does:

The scripts use as input the 'files2convert.txt' which contains all possible files needed to be converted.

This is for compatibility purposes to support as many roms as possible and for future changes.

files2convert.txt

/ramdisk/fstab.star
/ramdisk/fstab.p990
/ramdisk/init.cm.rc
/ramdisk/init.cm-star.rc
/ramdisk/init.star.rc
/system/etc/vold.fstab
/system/bin/setup-recovery
/system/bin/check_sdcard.sh
/META-INF/com/google/android/updater-script

More files can easily be added for conversion if needed.

The converter:

Extracts source ROM zip

Unpacks the boot.img

Reads the above files, replacing partitions' mount points, among some othe things, for the selected bootloader

Replaces the kernel image for the selected bootloader

Builds new boot.img

Creates new converted ROM zip

Under 'kernels' folder there are already included the two latest Kowalski kernel images (zImage) for old & new BL and its modules.

You can add more kernels and you’ll be prompted to choose the desired one when converting a ROM (if more than one is found ).

Read how to do this:

kernels folder contains all kernel images (zImage), kernel modules and any other file the kernel needs.

for each kernel there are:

file(s) named: prefix-KernelName[-ver].zImage

folder(s) named: [prefix-]KernelName[-ver]Kernel

where:

prefix must be oldbl or newbl (depending on which bootloader this kernel is for.

KernelName[-ver] is whatever you like [and optionaly its version].

zImage is the extension of the kernel image.

How to maintain kernels folder

A. Update existing kernels

Download the desired kernel package and open it.

Replace its kernel zIamge in kernels folder

Extract its modules and any other file needed and replace all existing ones

B. Add kernels

Download the kernel package and open it.

Find the zImage inside package and extract it into kernels

Rename it this format: prefix-KernelName[-ver].zImage

Create a folder named: prefix-KernelName[-ver]. It will be used to keep kernel's modules and other files needed. If this kernel is released for both bootloaders and its modules are identicaly on both bootloaders (like the existing kowalski one) then name the folder only KernelName[-ver] (without prefix).

Inside this [prefix-]KernelName[-ver] folder create a subdir tree lib\modules

Extract in lib\modules all kernel's modules from kernel package.

If any other file is needed by kernel then create it's subdir tree (assuming that [prefix-]KernelName is the system folder of the kernel package) and extract it there.

Attention:

Current version will hopefully work on CM-based ROMs.

Stock based ROMs need more files to be changed, but they are not included yet, because I don't have the whole info needed.

Hopefully @rugglez or someone else will be willing to help.

Till then avoid converting stock-based roms, (or if you do try, then after converting replace the boot.img in converted rom and "system/lib/modules/*"

at least

with a working boot.img and modules from another stock-based rom, for this bootloader of course. This could work but I am not the expert to say)
​