boot.img structure & creating custom boot.img - Galaxy Ace S5830i Q&A, Help & Troubleshooting

Hello Folks
I'm in the process of trying to create a custom boot.img. I've read a few threads and used the tools from this thread http://forum.xda-developers.com/showthread.php?t=2319018
I'm able to split the boot.img with the umkbootimg tool and create the file structure, make my alterations, re-pack the ramdisk and use mkbootimage to create a new boot.img file. But no matter what I do I cannot get this new boot.img to work. So, eventually I tried simply splitting the boot.img and just re-combining it again without making any changes. The boot.img still didn;t work, so I decided to have a closer look at the original and the new boot.img. I could only see 1 difference. At address 0x240 of the original appears to be a binary hash 20 bytes long, this hash also appears in the new boot.img byte for byte but what DOESN'T appear is what follows it at 0x260, in the original this seems to be another hash but this one is plain text, and that hash is NOT in the new boot.img. With this being the only difference I'm assuming this is some kind of verification/signature hash? As this is missing from the new boot.img I can only conclude this is why it isn't working, indeed, if I manually enter the hash into the new boot.img it does indeed work, but I'd expect it to, it is then after all a byte for byte duplicate of the original boot.img. So my question is, what is this hash? I've tried making md5s of the kernel, the ramdisk, the kernel+ramdisk and none seem to match.
EDIT: OK hold the press. Sorry, dunno how I missed it the first time I tested it, but the plain text hash appears to be simply an MD5 of the kernel image. Not sure what the binary hash is yet, but since the mkbootimage tool seems to calculate this correctly, it's not vital I figure that out. I could always look at the source code i guess heh.
Thanks for any help.
Dino

DobermanG said:
Hello Folks
I'm in the process of trying to create a custom boot.img. I've read a few threads and used the tools from this thread http://forum.xda-developers.com/showthread.php?t=2319018
I'm able to split the boot.img with the umkbootimg tool and create the file structure, make my alterations, re-pack the ramdisk and use mkbootimage to create a new boot.img file. But no matter what I do I cannot get this new boot.img to work. So, eventually I tried simply splitting the boot.img and just re-combining it again without making any changes. The boot.img still didn;t work, so I decided to have a closer look at the original and the new boot.img. I could only see 1 difference. At address 0x240 of the original appears to be a binary hash 20 bytes long, this hash also appears in the new boot.img byte for byte but what DOESN'T appear is what follows it at 0x260, in the original this seems to be another hash but this one is plain text, and that hash is NOT in the new boot.img. With this being the only difference I'm assuming this is some kind of verification/signature hash? As this is missing from the new boot.img I can only conclude this is why it isn't working, indeed, if I manually enter the hash into the new boot.img it does indeed work, but I'd expect it to, it is then after all a byte for byte duplicate of the original boot.img. So my question is, what is this hash? I've tried making md5s of the kernel, the ramdisk, the kernel+ramdisk and none seem to match.
EDIT: OK hold the press. Sorry, dunno how I missed it the first time I tested it, but the plain text hash appears to be simply an MD5 of the kernel image. Not sure what the binary hash is yet, but since the mkbootimage tool seems to calculate this correctly, it's not vital I figure that out. I could always look at the source code i guess heh.
Thanks for any help.
Dino
Click to expand...
Click to collapse
I am having the same problem

Raakib zargar said:
I am having the same problem
Click to expand...
Click to collapse
I've made some progress. Using ubuntu linux I've managed to unpack a boot.img, alter the files, repack and boot from it. Get the tools from the post I linked to above (remember to thank the poster) , you need:
mkbootimg
umkbootimg
I just dropped the binaries into the folder I was working from on my linux box. I then made a folder called ram (mkdir ram)
Copied the boot.img I wanted to unpack into my working folder and executed:
./umkbootimg boot.img
This split the image into the kernel (zImage) and ramdisk (initramfs.cpio.gz) take note of what umkbootimg says about repacking it as it contains important offsets and addresses. On mine it said
Code:
To recompile this image, use:
mkbootimg --kernel zImage --ramdisk initramfs.cpio.gz --base 0x81600000 --pagesize 4096 -o new_boot.img
Now cd into the ram folder (cd ram) and execute (assuming you have gzip and cpio installed on your linux box)
gunzip -c ../initramfs.cpio.gz | cpio -i
This will unpack all the files. Then make whatever changes you want. When completed, from within the ram folder execute
find . | cpio -o -H newc | gzip > ../new-initrd
then go back one folder (cd ..) and execute
./mkbootimg --kernel zImage --ramdisk new-initrd --base 0x81600000 --pagesize 4096 -o new_boot.img
(obviously use whatever parameters were quoted to you by umkbootimg earlier, mine is only an exmaple)
This then creates a valid boot.img that *should* work.
To flash it for testing I use Odin. Copy the new_boot.img to another folder and rename it to boot.img, then execute the following
tar -H ustar -c boot.img > boot.tar
md5sum -t boot.tar >> boot.tar
mv boot.tar boot.tar.md5
Then you can use Odin to flash the new image boot.tar.md5 (PDA).
The problem I'm having is that at the stage init.rc runs, it appears the sdcard is not available, neither /dev/block/mmcblk0 or /dev/block/vold/ paths are available. I'm basically trying to shift my /data folder from internal memory to external sdcard. If possible moving /system to the sdcard as well to make it easy to fiddle around with firmwares.

YESSSSSSSSSSSSSSSSSSSSSSSSSSSS!!!!
Hah, well it seems the solution was to make the event running in init.rc wait until the stream device for the sdcard was available. Then all it took was a small modification of init.rc where /data is usually mounted
Original code
Code:
mount rfs /dev/stl11 /data2 nosuid crypt nodev check=no
chown system system /data
chmod 0771 /data
Altered code
Code:
mkdir /data2 0771 system system
mount rfs /dev/stl11 /data2 nosuid nodev check=no
wait /dev/block/mmcblk0p2 300
mount ext3 /dev/block/mmcblk0p2 /data
chown system system /data
chmod 0771 /data
I've only tried it out on an old slow 8gb for testing, but I'll be cracking out the class 10 card now.
I know this is probably old news to you experience devs, but I'm still happy with myself for managing to do it
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}

Related

Generating boot.img for Dell Streak

Does anyone tried rebuilding boot.img for Streak?
Standard tools for unpacking and repacking the boot.img do not work, because Streak boot.img has a non-standard layout.
I managed to extract zImage and initrd manually from a working boot.img from r2-4399-streak-superboot.zip
gzip signatures 1F 8B 08 00 are at offsets:
0x49E0 - kernel
0x242000 - initrd
I extracted them manually using:
Code:
dd if=boot.img of=kernel.gz ibs=1 skip=18912 count=2348576
dd if=boot.img of=initrd.cpio.gz ibs=1 skip=2367488
But after reconstructing it into a boot.img again and flashing, Streak does not boot.
Code:
mkbootimg --base 0x20000000 --cmdline 'console=ttyMSM2,115200n8 androidboot.hardware=qcom' --kernel kernel.gz --ramdisk initrd.cpio.gz -o boot.img
fastboot -i 0x413c flash boot boot.img
Even after modyfing mkbootimg sources accordingly to carlosloz post, the generated boot.img still does not boot.
Does anyone know what magic sauce Dell adds to its boot.img ?
The changes that were proposed by carlosloz were identical the the changes I'd made to my mkboot the day before, and that was able to create a boot.img that did boot an extracted 4399 kernel and ramdisk.
I'll remember to post either the source or elf of it when I get home tonight for you to try.
see this page over at android-dsl.com Edit and Re-Pack Boot Images
fone_fanatic said:
see this page over at android-dsl.com Edit and Re-Pack Boot Images
Click to expand...
Click to collapse
The very second line of my post stated that this instructions do not work for Streak.
kwaaq said:
I'll remember to post either the source or elf of it when I get home tonight for you to try.
Click to expand...
Click to collapse
Thanks. I hope this would work.
So far I'm just running in circles scratching my head :/
Yes!
I got enlightenment yesterday and found a way of building boot.img
Attached you will find a boot.img that contains only kernel, adbd and busybox.
You may use it to see how deep the Streak Hole goes.
I was able to chroot to an Ubuntu Linux installation using this image.
Code:
[email protected]:~/Android/boot$ fastboot -i 0x413c flash boot boot.img
sending 'boot' (3136 KB)... OKAY
writing 'boot'... OKAY
[email protected]:~/Android/boot$ fastboot -i 0x413c reboot
rebooting...
[email protected]:~/Android/boot$ adb shell
~ $ su
su: access granted, courtesy of www.magicandroidapps.com
/ # ls
bin init.qcom.post_boot.sh root
default.prop init.qcom.rc sbin
dev init.qcom.sh sys
etc init.rc system
init proc tmp
/ # ls /sbin
adbd
/ # mount -t yaffs2 /dev/block/mtdblock6 /system
/ # ls /system
PreLoadNetworkSettings customization lost+found
Wallpapers etc media
app fonts ts.conf
bin framework usr
bootpriority.xml lib xbin
build.prop logfilter.ini
busybox lost+found
/ # umount /system
/ # mkdir /ubuntu
/ # mount -t ext2 /dev/block/mmcblk1p2 /ubuntu
/ # ls /ubuntu
bin home mnt sbin system
boot lib opt selinux tmp
dev lost+found proc srv usr
etc media root sys var
/ # PATH=/usr/bin:/usr/sbin:/bin:/sbin
/ # chroot /ubuntu /bin/bash
[email protected]:/# ls
bin dev home lost+found mnt proc sbin srv system usr
boot etc lib media opt root selinux sys tmp var
[email protected]:/# exit
/ #
~ $
OK, so I download your boot.img file and fastboot flashed it. After the reboot it comes to a black screen but I get no ADB driver prompt on my computer. I assume it's just freezing on boot.
What version of the Streak are you running the rom on?
JoeJonnyBoy75 said:
OK, so I download your boot.img file and fastboot flashed it. After the reboot it comes to a black screen but I get no ADB driver prompt on my computer. I assume it's just freezing on boot.
What version of the Streak are you running the rom on?
Click to expand...
Click to collapse
It's based on 4399 build, so it possibly runs on 21-EU models only.
Black screen is not good. You should see a short blank and see the Dell logo again with lower intensity of softbuttons light.
How did you manage to get the kernel and ramdisk back together?
I'm currently working on replacing the internal sdcard with a 16GB one but I need to modify the init.rc files to make it work.
<rant>I could behave like Paul @ MoDaCo and just ignore the question. But... </rant>
Like I mentioned the kernel and initrd start with gzip signature.
So you need to extract:
- header: 0 - 0x49DF
- kernel.gz: 0x49E0 - 0x241FFF
- initrd.cpio.gz: 0x242000 - EOF
Disassembling several working boot.img revealed that the offsets are always the same, and the usually empty header contains something that looks like a bootloader code. So I figured mkbootimg file with zero-filled header won't work.
So, I created new initrd (mkbootfs or straight cpio - both work), padded it with /dev/zero to 4k page size, concatenated header+kernel+newinitrd.
Almost there. You need to update header offsets and sizes. initrd offset stays the same, but size is different. initrd size is 4 bytes from 0x10 byte in header. Just enter the size of initrd (before padding with zeros) there, and you're done.
First I did it manually. Now I have a simple bash script to automate the work.
Above method works 100%. Every boot.img I generate works fine.
The key is to start with a working boot.img for your device - you need a kernel suited to your hardware.
Any chance you'd like to share your script?
One other quick question. I understood most of your instructions, although this isn't really my field of expertise, except how/where to enter the size of the init. If I'm understanding you correctly it goes at address 0x00000010.
Which would mean that in your red pill the entry you have at that address is DA DD 0C 00?
Also if you have time could you explain the padding part?
I think I'm close to getting this working, and look forward to custom init files.
The following information got outdated.
See http://codex.xiaoka.com/wiki/streak:kernel_porting#flashing
(Attachment Removed)
JoeJonnyBoy75 said:
Any chance you'd like to share your script?
Click to expand...
Click to collapse
Sure. No prob.
But mind it's SuperUgly(TM) but it gets the job done.
Click to expand...
Click to collapse
JoeJonnyBoy75 said:
One other quick question. I understood most of your instructions, although this isn't really my field of expertise, except how/where to enter the size of the init. If I'm understanding you correctly it goes at address 0x00000010.
Which would mean that in your red pill the entry you have at that address is DA DD 0C 00?
Also if you have time could you explain the padding part?
I think I'm close to getting this working, and look forward to custom init files.
Click to expand...
Click to collapse
0x000CDDDA = 843226 bytes, which is the size of my initrd.
The page size of boot.img is 4k so you need to pad the initrd to fill the whole last page with something - preferably zeros.
smokku said:
Does anyone tried rebuilding boot.img for Streak?
Standard tools for unpacking and repacking the boot.img do not work, because Streak boot.img has a non-standard layout.
Click to expand...
Click to collapse
I was able to extract boot.img using the command "unpack-bootimg.pl" found in split_bootimg.zip from that link.
Code:
$ unpack-bootimg.pl boot.img
kernel written to boot.img-kernel.gz
ramdisk written to boot.img-ramdisk.cpio.gz
gzip: ../boot.img-ramdisk.cpio.gz: decompression OK, trailing garbage ignored
591 blocks
extracted ramdisk contents to directory boot.img-ramdisk/
Or is this not the proper way to do it?
fone_fanatic said:
I was able to extract boot.img using the command "unpack-bootimg.pl" found in split_bootimg.zip from that link.
[...]
Or is this not the proper way to do it?
Click to expand...
Click to collapse
IIRC unpack-bootimg.pl extracts initrd correctly, but kernel is broken,
and split_bootimg.pl the other way around - kernel is OK, but initrd is incomplete.
But splitting the image is easy. The reconstruction using standard tools (mkbootimg) does not work though.
smokku said:
IIRC unpack-bootimg.pl extracts initrd correctly, but kernel is broken,
and split_bootimg.pl the other way around - kernel is OK, but initrd is incomplete.
But splitting the image is easy. The reconstruction using standard tools (mkbootimg) does not work though.
Click to expand...
Click to collapse
Ahh ok, haven't tried to repack yet, just been snooping around in it.
Sent from my Dell Streak using XDA App
Apologies, first time I've actually gotten home at a sane hr for the past two weeks.
Thank you very much smokku. I've finally, successfully, recompiled my boot.img and am able to make changes.
Here are the step I used to get it to work. Note that the kernel for the 2.1 roms starts at a lower address then the 1.6 ones.
1. Unpack-bootimg.pl got me the initrd folder and contents.
2. I ended up extracting the header and kernel via a hex editor. I used the gzip headers to find the start of the initrd and then purged it.
3. This left me with a header/kernel file and the initrd folder. I then made the changes to initrd I wanted. (Still lots of testing to do)
4. I modified the script provided by smokku (awesome) to work with the header/kernel file being one file instead of two.
5. Ran the script and recorded the output size.
6. Opened the new compiled boot file with a hex editor and entered the size at address 0x10 (as per smokku).
7. Installed the new boot.img with fastboot and rebooted.
Now it all works and I'm able to modify to my hearts content. Guess I now have to do it with the 8105 build.
Thanks smokku, couldn't have done it without you.
Now the only missing link is the kernel source.

[GUIDE][U, SOLA, GO, P][ICS/JB][Unlocked BL] Enable Multi Boot Feature

Hello Guys,
This is my first thread in XDA and probably the most important one too. As the title says, I would like to introduce the awesome multiboot capabilities of Xperia U, Sola, Go, P developed by our favourite dev munjeni . Here is the original thread http://forum.xda-developers.com/showthread.php?t=2418241. Go there & give thanks to him for this awesome feature.
UPDATE: September 20, 2013
Made it to the Portal Homepage!!!!
Thanks all for your constant support for updating this thread and thanks to munjeni without whom this feature would've been just a dream
Portal Link: http://www.xda-developers.com/android/enable-multi-boot-on-the-xperia-u-sola-go/​
Click to expand...
Click to collapse
So, What is Multiboot ?
Ever got tired of flashing ROM again & again because of bootloop or to choose a good ROM?? Well news flash, now u don't have to. U can install multiple operating system in your ROM just like you do in your computer. Don't like the new ROM? Just switch your ROM to previous one with just a click. No flashing, wiping needed. The secondary ROM will be loaded from the sdcard partition.​
WARNING: Your warranty is already void. You will do this at your own risk. Me or XDA will take no responsibility if you brick your device while attempting to do these.
Requirements
ADB connection. Please check if you can connect adb in normal mode, recovery mode, fastboot mode. It's mandatory.
Rooted phone with unlocked bootloader
Any text editor except notepad, microsoft word or wordpad.
It is recommended to edit all files in PC with text editors and with unix/utf-8 format.
Brain & Brave heart
This is a step by step guide to enable multiboot intended for all users including noobs like me . The whole process is divided into several parts. First I'll guide you to boot your current rom (primary rom) through boot menu. Then I'll cover how to boot the second rom.
So, Let's Get Started !!!!
Booting Into Primary/Current ROM​
Part 1: Configure BootMenu Settings
So, the basic is this: when you power on your device, a menu will appear containing the list of ROMs' you have installed in your device. You browse it and select which ROM you want to boot. Then it'll be loaded. Pretty simple, eh ? But how will this menu figure out which ROM you have in your device? That's right, we have to define them.
Create a folder named "bootmenu" in your sdcard
Inside the folder, create a file named "settings.ini"
Now say you have stock JB 4.1.2 installed. So create a folder inside "bootmenu" named "StockJB". Also we have to create another folder "recovery" so that we have cwm recovery in Boot.
Don't use space while naming the folder. Otherwise bootmenu will show error at startup.
Now we have to edit the settings.ini file. Copy it to desktop and open it with text editor. Write these code....
Code:
[rom-1]
menutitle=Stock JB
kernel=/sdcard/bootmenu/StockJB/zImage
ramdisk=/sdcard/bootmenu/StockJB/initrd.gz
cmdline=[COLOR="Red"]your_cmdline[/COLOR]
[rom-2]
menutitle=CWM Touch Recovery
kernel=/sdcard/bootmenu/recovery/zImage
ramdisk=/sdcard/bootmenu/recovery/initrd.gz
cmdline=[COLOR="Red"]your_cmdline[/COLOR]
Let's explain these. "menutitle" is the name that'll appear in the menu when you power on the device. kernel, ramdisk, cmdline will be extracted from the boot.img that is provided with the ROM. More info about extracting them will be discussed later. You can see that in the kernel,ramdisk we have to set the path to the StockJB and recovery folder we created earlier. There are 2 rom settings for stock jb & recovery. If you want to have more ROM, you have to add another rom settings here. "cmdline" is kernel command line. You can find it when you extract boot.img or kernel.elf (see part 2). Open it with editor and copy-paste the whole text in your_cmdline. Now, ROM1 here will be the default rom i.e if you don't select any rom to load in 10 seconds, bootmenu will automatically load the ROM1 defined here :good:. After you're done editing simply overwrite the settings.ini with your new settings.ini in bootmenu folder. That's the end of first part. We'll come back to these folder again later.
Part 2: Extracting boot.img
Now we'll dive into more complex steps. We'll extract the kernel(zImage) and ramdisk(initrd.gz) from the boot.img that is provided with the rom.zip package. We'll need some tools to do that. Download the image_tools.rar from download section. Extract the files and copy them to your /system/bin folder. Make sure to give them permission 755 or rwx r-x r-x. Reboot your phone to apply the changes.
Now extract your current ROMs' boot.img and copy it to /data/local/tmp folder. Now connect your phone with pc, establish adb connection and follow the given code:
Code:
adb shell
su
cd /data/local/tmp
mkdir boot
kernel_dump ./boot boot.img
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
this will dump kernel(zImage), ramdisk(initrd.gz) and cmdline to your /data/local/tmp/boot folder. For elf based kernel, just change the boot.img with kernel.elf.
Part 3: Ready the ROM For Booting
We will be using ramdisk(initrd.gz) only from the dumped folder since the kernel(zImage) inside it is not kexec patched!!! (If zImage is kexec patched, then use that one rather than from download section). Download the zImage, bootmenu, recovery ramdisk from download section. Extract it, you will find zImage inside it along with another initrd.gz and a modules folder. Copy both zImage & initrd.gz from the downloaded folder and paste it in /sdcard/bootmenu/recovery folder that you created earlier. Now copy the recently dumped initrd.gz from /data/local/tmp/boot to /sdcard/bootmenu/StockJB that you created. For zImage copy the appropriate one for ICS/JB from downloads and paste in here. The folder structure will look like these:
/sdcard/bootmenu
Stock_JB
initrd.gz (from /data/local/tmp/boot folder)
zImage (from downloads)
recovery
initrd.gz (from downloads)
zImage (from downloads)
settings.ini
Note: When custom kernel with kexec patch will be released, you will use zImage, initrd.gz from that kernel.
We're nearly there. Only two thing remains. Since we'll use munjenis' JB kernel(zImage) or DevSwift1s' ICS kernel we need to flash the proper module for that kernel. Otherwise wifi & other module will not work. So copy the modules from modules folder and paste it in /system/lib/modules folder. Give them permission 644 or rw- r-- r--. Now you have to flash the boot_menu.img to get the menu at startup. That's simple, download the boot_menu.img from download section and flash it by fastboot.
That's it!!! Your current ROM (primary rom) is ready for booting. Reboot your device and you'll enter bootmenu. You'll find options for your Stock JB and CWM Touch Recovery. Simply select your rom and you'll boot into your Primary ROM :laugh::laugh:. Your bootmenu will look like these except you'll have Stock JB option (I'm using SlimBean & CM 10.1 ).
Downloads
Xperia U (JB)​1) packing, unpacking ->View attachment image_tools.rar
2) zImage. modules, recovery ramdisk -> View attachment cwm.rar
3) bootmenu -> View attachment boot_menu.img
Click to expand...
Click to collapse
Xperia Sola (JB)​1) packing, unpacking ->View attachment image_tools.rar
2) zImage, modules, recovery ramdisk, bootmenu
Click to expand...
Click to collapse
Xperia Go (JB)​1) packing, unpacking ->View attachment image_tools.rar
2) bootmenu
3) zImage, modules, recovery ramdisk
Click to expand...
Click to collapse
Xperia P ​Download from this thread http://forum.xda-developers.com/xperia-u/p-development/-t2647623
Click to expand...
Click to collapse
Xperia U, Sola, Go (ICS)​1) packing, unpacking -> same as JB
2) zImage. modules, -> here
3) recovery ramdisk, bootmenu -> same as JB
Click to expand...
Click to collapse
Customized Bootmenu, Recovery​http://forum.xda-developers.com/showpost.php?p=45733631&postcount=349
Click to expand...
Click to collapse
​::Credits::​
@munjeni bro for this awesome feature in our awesome device. ALL HAIL MUNJENI
@DevSwift1 for providing ICS kexec patched kernel
@percy_g2 for his work on Xperia P
Me, for writing this guide
Welcome to the second part of this guide . Here I'll cover how to create partitions in sdcard and from them how to boot the second ROM. Things that you need to know before doing this:
First if you do these, I'm assuming you've succeeded in booting into primary ROM. If not, please don't do this.
You need to have some space in your sdcard (depends on your rom size).
You can't use CWM Touch Recovery (created earlier) in your second ROM. You have to use its' own recovery. But its' recovery also won't work without modification. It'll be discussed in part2.
You can't flash ROM.zip normally on second ROM. For that you have to modify your updater-script a little bit. It'll be discussed in part 3.
Getting worried? Well, don't be. It's easy if you follow the steps thoroughly :fingers-crossed:
Let's get started!!!
Booting Into Second ROM
From Internal Storage​
Part 1: Creating Partition in SDCARD
We have to create three separate partition. One for system, one for data & last one for cache since your current roms' data, system, cache won't match with your second rom. Now say you want CM 10.1 as your second rom. It's size is around ~175MB. After unzipped it is ~290MB and with gapps it becomes ~450MB. So we'll create around 600~650MB sized system partition. Always create system with more space otherwise android will fail to boot.
Enough talk. Let's jump into action. Connect your phone, establish ADB connection do as the following:
Code:
adb shell
su
df
this'll show all your mounted partitions and their status. See that system is mounted at /dev/block/mmcblk0p10, data is mounted in /dev/block/mmcblk0p11, cache in /dev/block/mmcblk0p12 (see screenshot). We need to remember this for future use.
Now to create all partitions do as following after reading the explanation below:
Code:
[B][CENTER]##### for system partition only ([COLOR="red"]Updated[/COLOR]) #####[/CENTER][/B]
[COLOR="Red"]dd if=/dev/zero of=/sdcard/your_desired_folder/system.ext4 bs=4096 count=(your desired size)[/COLOR]
###### wait till the partitions is created ######
[COLOR="Red"]losetup /dev/block/loop1 /sdcard/your_desired_folder/system.ext4
blkid /dev/block/mmcblk0p10 ([COLOR="blue"]this'll give you a UUID[/COLOR])
mke2fs -T ext4 -O has_journal,extent,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize -U ([COLOR="Blue"]paste here your UUID[/COLOR]) -I 256 /dev/block/loop1
losetup -d /dev/block/loop1[/COLOR]
[B][CENTER]##### for data,cache partition #####[/CENTER][/B]
dd if=/dev/zero of=/sdcard/your_desired_folder/data.ext4 bs=4096 count=[COLOR="Blue"][B]76800[/B][/COLOR]
###### wait till the partitions is created ######
dd if=/dev/zero of=/sdcard/your_desired_folder/cache.ext4 bs=4096 count=(your desired size)
###### wait till the partitions is created ######
Ok, let's explain these. "dd" comand will create partition based on the parameter given by you. So in these case partition will be created from /dev/zero to /sdcard/your_folder. Be careful, don't switch "if" with "of" and "of" with "if", it may brick your device. Notice that there are some other parameters. "bs" is the blocksize of your new partition and it's default value is 4096KB(4MB). Don't change it. Let's say you want to create data partition with size of 300MB (cause you don't use many apps). So 300/4(block size) = 75 and 75*1024 = 76800. That's the "count" parameter. So modify system, data, cache size according to your needs but make sure that you have enough space to create your desired partition. "losetup" basically sets up the loop so that you can mount your partition into that loop.
Update: You can now create system partition with exact amount of size instead of cloning them ( big thanks to munjeni again ). Before, creating specific sized system partition caused bootloop cause it was missing an unique identifier (UUID). Now it has been fixed (marked with red code).
Now comes more complex steps. You need to make sure to avoid any partition corruption and check for errors. Reboot your phone to bootmenu and press any key to avoid auto restart. Keep the device in boot menu. Now again check your adb connection and do these:
Code:
adb shell
losetup /dev/block/loop1 /sdcard/your_folder/system.ext4
losetup /dev/block/loop2 /sdcard/your_folder/data.ext4
losetup /dev/block/loop3 /sdcard/your_folder/cache.ext4
##### To pack/unpack ext4 #####
make_ext4fs /dev/block/loop1
make_ext4fs /dev/block/loop2
make_ext4fs /dev/block/loop3
##### To check for error #####
e2fsck -f -y /dev/block/loop1
e2fsck -f -y /dev/block/loop2
e2fsck -f -y /dev/block/loop3
##### for tuning and cleaning up ([COLOR="red"]just loop2 & loop3[/COLOR]) #####
tune2fs -o journal_data_writeback /dev/block/loop2
tune2fs -o journal_data_writeback /dev/block/loop3
##### unmount loop and sdcard #####
losetup -d /dev/block/loop1
losetup -d /dev/block/loop2
losetup -d /dev/block/loop3
umount /sdcard
##### reboot #####
exit
adb reboot
That's it!!!! Your new partitions are now ready for booting. :laugh::laugh:
Part 2: Modifying Second ROMs' Ramdisk
So while booting into primary rom, we simply put the ramdisk in /sdcard/bootmenu/StockJB without modifying it. Why do we need to modify it for second rom? Well unless modified, all your recoveries will recognize only your primary rom. So If you flash a rom thinking that it'll be installed in second rom, you'll see it got installed in your primary rom!!! So we'll modify the second roms' recovery so that it can use second rom while cwm touch recovery will use primary rom. Two recoveries for two roms
First, extract boot.img from your second roms' zip file and place it in /data/local/tmp folder (if any boot.img or boot folder is present there just delete it). Then extract the boot.img the same way as discussed in 1st post (part2). Then you'll have boot folder in /data/local/tmp. After that do as following:
Code:
cd /data/local/tmp/boot
mkdir ramdisk
cd ramdisk
gunzip < ../initrd.gz | cpio -i -d
this'll extract ramdisk(initrd.gz) in the ramdisk folder inside boot folder. copy this ramdisk folder in your desktop. Inside there are many files. We only need to modify some of them. Ok, change these files in the following area:
For JB Ramdisk​
init.rc
find line "mkdir /system" and add line: "mkdir /sde" before line mkdir /system"
Click to expand...
Click to collapse
fstab.st-ericsson
# Android fstab file.
#<src> <mnt_point> <type> <mnt_flags and options> <fs_mgr_flags>
# The filesystem that contains the filesystem checker binary (typically /system) cannot
# specify MF_CHECK, and must come before any filesystems that do specify MF_CHECK
/dev/block/mmcblk0p6 /modemfs ext4 noatime,nosuid,nodev,nomblk_io_submit,errors=panic wait,check
/dev/block/loop1 /system ext4 ro wait
/dev/block/loop2 /data ext4 noatime,nosuid,nodev,nomblk_io_submit,errors=panic wait,check
/dev/block/loop3 /cache ext4 noatime,nosuid,nodev,nomblk_io_submit,errors=panic wait,check
Click to expand...
Click to collapse
recovery.fstab
# mount point fstype device [device2] fstype2
/boot emmc /dev/null
/system ext4 /dev/block/loop1
/data ext4 /dev/block/loop2
/cache ext4 /dev/block/loop3
/sdcard vfat /dev/block/mmcblk0p14
/external_sd vfat /dev/block/mmcblk1p1 /dev/block/mmcblk1
Click to expand...
Click to collapse
init.st-ericsson.rc
on fs
# If you change anything here, make sure to update
# <root>/vendor/semc/system/bootstrap/masterreset/fstab.riogrande
# accordingly.
setprop ro.crypto.state unsupported
wait /dev/block/mmcblk0p14
mkdir /sde
mount vfat /dev/block/mmcblk0p14 /sde rw wait
exec /sbin/losetup /dev/block/loop1 /sde/your_folder/system.ext4
exec /sbin/losetup /dev/block/loop2 /sde/your_folder/data.ext4
exec /sbin/losetup /dev/block/loop3 /sde/your_folder/cache.ext4
exec /sbin/e2fsck -y /dev/block/loop2
mount_all fstab.st-ericsson
# SEMC: Start the TrimArea Daemon and early TA-users
Click to expand...
Click to collapse
For ICS Ramdisk​
fstab (if doesn't exist, ignore it)
# These declarations must match the mount statements in
# <buildroot>/device/semc/riogrande/files/init.riogrande.rc
/data ext4 /dev/block/loop2
/cache ext4 /dev/block/loop3
/modemfs ext4 /dev/block/mmcblk0p6
Click to expand...
Click to collapse
init.rc
find line "mkdir /system" and add line: "mkdir /sde" before line mkdir /system"
Click to expand...
Click to collapse
recovery.fstab
# mount point fstype device [device2] fstype2
/boot emmc /dev/null
/system ext4 /dev/block/loop1
/data ext4 /dev/block/loop2
/cache ext4 /dev/block/loop3
/sdcard vfat /dev/block/mmcblk0p14
#/sd-ext ext4 /dev/block/mmcblk0p2
/emmc vfat /dev/block/mmcblk1p1 /dev/block/mmcblk1
Click to expand...
Click to collapse
init.st-ericsson.rc (red lines are modified & blue lines are new)
on fs
# If you change anything here, make sure to update
# <root>/vendor/semc/system/bootstrap/masterreset/fstab.riogrande
# accordingly.
# Wait for eMMC device to become available
wait /dev/block/mmcblk0p14
mkdir /sde
mount vfat /dev/block/mmcblk0p14 /sde rw
exec /sbin/losetup /dev/block/loop1 /sde/your_folder/system.ext4
exec /sbin/losetup /dev/block/loop2 /sde/your_folder/data.ext4
exec /sbin/losetup /dev/block/loop3 /sde/your_folder/cache.ext4
# Mount system partition
mount ext4 /dev/block/loop1 /system ro
# Mount user data partition
exec /system/bin/logwrapper /system/bin/e2fsck -y /dev/block/loop2
setprop ro.crypto.state unsupported
mount ext4 /dev/block/loop2 /data nosuid nodev noatime noauto_da_alloc
# Mount cache partition
mount ext4 /dev/block/loop3 /cache nosuid nodev noatime
mount ext4 /dev/block/mmcblk0p6 /modemfs nosuid nodev noatime
# FOTA must be started after partitions are mounted
# and property service is initialized
exec /sbin/fota-ua c
Click to expand...
Click to collapse
That's it. You're done editing. Now save & copy these modified files to your /data/local/tmp/boot/ramdisk folder. Then in cmd do as the following:
Code:
cd /data/local/tmp/boot
mkbootfs ./ramdisk | gzip > initrd.gz
this'll repack the ramdisk folder into initrd.gz and save it in /data/local/tmp/boot folder. Make a new folder in your /sdcard/bootmenu for the new rom and copy this initrd.gz to that folder. Also copy the appropriate zImage for ICS/JB and paste it here. Add a new rom settings in settings.ini for this rom. Now you've your ramdisk ready and modified for flashing zips in second rom .
Part 3: Finishing Touch
We're at the end of this long road. You just have to modify your "rom.zip"s updater-script so that it flashes the rom in your newly created partition. Extract your updater-script, open it with editor. Remember that we saw system is in /dev/block/mmcblk0p10, data in /dev/block/mmcblk0p11, cache in /dev/block/mmcblk0p12. Find all the lines that start with "format" or "mount" (example format("ext4", "EMMC", "/dev/block/mmcblk0p10", "0")) and replace the /dev/block/mmcblk0p10 with /dev/block/loop1, /dev/block/mmcblk0p11 with /dev/block/loop2 and /dev/block/mmcblk0p12 with /dev/block/loop3. Also remove the function that flashes the kernel. It's usually at the end of the script. Just search for kernel.elf or boot.img and delete that function. Save the updater-script and push it into the zip with winrar. Choose compression "store".
NOTE: If you forget to remove the kernel function then don't worry. It just removes your bootmenu when you flash the second rom. Just power off the device after flashing and flash boot_menu.img again by fastboot.
Now reboot to bootmenu, your second roms' title that you defined in settings.ini will appear here. Select it, then phone will restart and load your second rom. Press vol. down repeatedly to enter its' recovery. From there flash your second rom. Reboot again to bootmenu and select second rom again. Now you'll see second ROM BOOTING !!!!!!! :good::good:
Hope it is clear to all of you. I tried my best to explain everything. If you need help, feel free to post. Also if you like my guide, give it a 5 star and press thanks to appreciate my work
================== THE END ==================​
F.A.Q​
1. Will this work on GB,ICS ?
Ans: Now Working For ICS based ROM too. See this post for kexec patched kernels ICS kernel with kexec support
For GB, you have to wait for kernel.
2. How can I remove the second ROM ?
Ans: Make sure you are in primary ROM, then just delete the 3 partitions from sdcard.
3. Can't unmount sdcard: device or resource busy
Ans: Type fuser -km /sdcard. It'll kill all the process that's keeping your sdcard busy. Then unmount sdcard.
4. Getting status 7 error ?
Ans: Delete assert function from updater-script.
5. Wifi's not working even after flashing modules from attachment ?
Ans: Unpack initrd.gz and see if there's a lib/modules folder inside it. If it exists and deep inside there are 2 modules, then you need to replace them with the ones from attachment.
6.Getting status 6 error no matter what ?
Ans: Always edit files in unix/utf-8 format and use compression method store to push files in zip. NEVER USE DOS FORMAT.
7.Getting "somthing went wrong. please see log!" in bootmenu ?
Ans: You have done something wrong in settings.ini or folder naming. Check again.
Very good tut. Men !
Nice Bro,
So we don't need system.ext4, data.ext4 and cache.ext4 in sdcard?
I think this thread belong to Xperia U develompent section.
JohnLouise said:
Very good tut. Men !
Click to expand...
Click to collapse
thnx
mohammadagha said:
Nice Bro,
So we don't need system.ext4, data.ext4 and cache.ext4 in sdcard?
I think this thread belong to Xperia U develompent section.
Click to expand...
Click to collapse
Yes we'll need them for second ROM. I'll upload guides for them soon
If it belongs to dev section, pls can someone tell the moderator to move it ?
Nice
You are the best :good::laugh:
Good start!
very nice tutorial
@NoobCoder How the hell did u take screenshot in bootmenu recovery bro? :laugh:
Delete this thread fast and make new one in Development section because if u wait for Moderators and they say u can not move thread, Many pepole will lost this good thread.:good:
NoobCoder said:
I'll upload soon guides for booting into second ROM. Pls be patient
Click to expand...
Click to collapse
Thanks for this bro.... waiting for other part..... :cheers:
Anthrax said:
Thanks for this bro.... waiting for other part..... :cheers:
Click to expand...
Click to collapse
cmdline in setting.ini belongs to Xperia U, You can find it for sola, Just open kernel.elf for sola with notepad, You can find it at the end of notes.
mohammadagha said:
@NoobCoder How the hell did u take screenshot in bootmenu recovery bro? :laugh:
Delete this thread fast and make new one in Development section because if u wait for Moderators and they say u can not move thread, Many pepole will lost this good thread.:good:
Click to expand...
Click to collapse
By DDMS . Also I reported this thread to move into the dev section, but moderator said this is the right section. Anyway to all users, please report this thread to make it sticky/pinned so that no one have any problems finding it
in step 2 i got this error in cmd:
Using existing folder ./boot
dd: can't open 'boot.img': No such file or directory
FAILURE to dump boot.img to ./boot! Pllease try another folder!
I know what kernel i'm using so can i just extract it with winrar
can u post same for Xperia P
dd98 said:
in step 2 i got this error in cmd:
Using existing folder ./boot
dd: can't open 'boot.img': No such file or directory
FAILURE to dump boot.img to ./boot! Pllease try another folder!
I know what kernel i'm using so can i just extract it with winrar
Click to expand...
Click to collapse
No, boot.img can't be extracted with winrar. you copied the boot.img to /data/local/tmp, right ? Please provide a screenshot if this doesn't help you.
Aamirx12 said:
can u post same for Xperia P
Click to expand...
Click to collapse
Sorry bro, munjeni stopped P's development. So I can't do it
Thanks mate! I was waiting for this for a long time. It ws actually ment for go and sola, but ultimately, munjeni ended up with developing it for U
Thanks to him too!
One more question.
What exactly i have to do to make this for sola?
Sorry to bother you..
Sent from my MT27i using xda app-developers app
cpkunki said:
Thanks mate! I was waiting for this for a long time. It ws actually ment for go and sola, but ultimately, munjeni ended up with developing it for U
Thanks to him too!
One more question.
What exactly i have to do to make this for sola?
Sorry to bother you..
Sent from my MT27i using xda app-developers app
Click to expand...
Click to collapse
Guess we're the lucky ones . Also there were many user who tried to test. That encouraged munjeni bro to keep the thread updated.
I'll check files uploaded by munjeni to get an idea how to do it in sola. But I think he mentioned it in post 4 in sola section. Check that and follow this guide. I'm sure you'll be able to do it
Can't umount
When I write umount /sdcard (final step) the CMD say me: can't umount /storage/sdcard0: Device or resource busy.
But I have 1.2 gb free space in the SD. Why?
cesanaboia said:
When I write umount /sdcard (final step) the CMD say me: can't umount /storage/sdcard0: Device or resource busy.
But I have 1.2 gb free space in the SD. Why?
Click to expand...
Click to collapse
That's strange. It didn't occur to me. You have 1.2GB free after creating all partition or before? If before, then you have to free more space. If it doesn't help, pls post a screenshot. Also don't create partitions yet. I'll update the post with new code.
Sent from my Xperia U using Tapatalk 2

Advice : Porting Indian ROM to Chinese ROM on Samsung Galaxy A8 8000 Model (China)

hi
I purchased a Samsung Galaxy A8 A8000 from China. I did not like its ROM since it lacked Google Apps and other stuff. So i decided to port system apps (apps+priv-app) from an indian rom. I am totall new to ROM stuff and to linux as well but i decided to go with virtual box and learn few things along the way.
For this,
first i extracted indian rom, it contained following
boot.img, cache.img, hidden.img, modem.bin, recovery.img, sboot.bin and system.img
then i extracted chinese rom, it contained different files as below
aboot.mbn, boot.img, cache.img.ext4, hyp.mbn, modem.bin, NON-HLOS.bin, recovery.img, rpm.mbn, sbl1.mbn, sec.dat, system.img.ext4 and tz.mbn
Since i donot want to mess with partitions and modem and other stuff so i decided to port only apps from indian rom and built an odin flashable tar file
For this i navigated various forum, i even dont exactly remember all but i am thankful to all who wrote useful stuff that helped me decide what to do, well most important of these were
http://forum.xda-developers.com/showthread.php?t=1974014
http://forum.xda-developers.com/showthread.php?t=1941239
http://rwilco12.com/forum/showthread.php?tid=92
first of all i converted indian rom system.img to system.raw using following command in linux virtualbox ubuntu 15.04
simg2img indsystem.img indsystem.raw
then i mounted this raw image using this command
mkdir indsystem
mount -o loop indsystem.raw indsystem/
then i converted chinese rom system.img to system.raw using same command as above
simg2img chcsystem.img chcsystem.raw
then i mounted this chinese raw image using this command
mkdir chcsystem
mount -o loop chcsystem.raw chcsystem/
then i created a system_new.img.ext4 file of 3.1GB size with this command
dd if=/dev/zero of=system_new.img.ext4 bs=4k count=775000
then i formated new image with ext4
mkfs.ext4 system_new.img.ext4
then probably i override the file system check and then mounted new ext4 image
tune2fs -c0 -i0 system_new.img.ext4
mkdir system_new
mount -o loop system_new.img.ext4 system_new
here i had a problem, i could not copy files from both indian and raw mounted images to my new ext4 image since i did not have permission to copy to the destination folder. then i made use of superuser access
gksu nautilus /path/to/image/folder
then i had full access and copied chinese rom to my new ext4 image.
cp -v -r -p chcsystem/* system_new/
then i deleted app, priv-app, font, framework, media, etc/permissions/allfiles-starting-with-android.-and-com.-and-allshare_library.xml from ext4 image.
then i manually copied these folders and permission files from indian system raw image file to my new ext4 image file
next i copy /system/lib/libandroid_runtime.so from chinese rom to the system/lib/ directory of indian rom and then deleted lib folder from chinese rom and replaced it with indian rom
then i sync files with "sync" command
then unmounted all partitions.
I then replaced system.img.ext4 file in my original rom with one that i have just made.
Now i need to compile these files back into flashable tar files with md5sum check with
tar -H ustar -c image_1 image_2 > your_odin_package.tar
md5sum -t your_odin_package.tar >> your_odin_package.tar
mv your_odin_package.tar your_odin_package.tar.md5
1. but before i do so I need some advance developer to please help me out and give some confidence as to the approach that i have used. is that correct.
2. Secondly, if someone can tell me tar ball flashing order for my rom since i heard it is important while compiling odin flashable tar file.
aboot.mbn, boot.img, cache.img.ext4, hyp.mbn, modem.bin, NON-HLOS.bin, recovery.img, rpm.mbn, sbl1.mbn, sec.dat, system.img.ext4 and tz.mbn
3. Also Is it possible that i convert system.img.ext4 into flashable odin tar file with above commands and flash only system image with Odin without messing with anyother settings.
Thank you
No one would like to help me out here.
Hi. I plan to do the same for my SM-A7000. did you get your to work?
waqasjeral said:
hi
I purchased a Samsung Galaxy A8 A8000 from China. I did not like its ROM since it lacked Google Apps and other stuff. So i decided to port system apps (apps+priv-app) from an indian rom. I am totall new to ROM stuff and to linux as well but i decided to go with virtual box and learn few things along the way.
For this,
first i extracted indian rom, it contained following
boot.img, cache.img, hidden.img, modem.bin, recovery.img, sboot.bin and system.img
then i extracted chinese rom, it contained different files as below
aboot.mbn, boot.img, cache.img.ext4, hyp.mbn, modem.bin, NON-HLOS.bin, recovery.img, rpm.mbn, sbl1.mbn, sec.dat, system.img.ext4 and tz.mbn
Since i donot want to mess with partitions and modem and other stuff so i decided to port only apps from indian rom and built an odin flashable tar file
For this i navigated various forum, i even dont exactly remember all but i am thankful to all who wrote useful stuff that helped me decide what to do, well most important of these were
http://forum.xda-developers.com/showthread.php?t=1974014
http://forum.xda-developers.com/showthread.php?t=1941239
http://rwilco12.com/forum/showthread.php?tid=92
first of all i converted indian rom system.img to system.raw using following command in linux virtualbox ubuntu 15.04
simg2img indsystem.img indsystem.raw
then i mounted this raw image using this command
mkdir indsystem
mount -o loop indsystem.raw indsystem/
then i converted chinese rom system.img to system.raw using same command as above
simg2img chcsystem.img chcsystem.raw
then i mounted this chinese raw image using this command
mkdir chcsystem
mount -o loop chcsystem.raw chcsystem/
then i created a system_new.img.ext4 file of 3.1GB size with this command
dd if=/dev/zero of=system_new.img.ext4 bs=4k count=775000
then i formated new image with ext4
mkfs.ext4 system_new.img.ext4
then probably i override the file system check and then mounted new ext4 image
tune2fs -c0 -i0 system_new.img.ext4
mkdir system_new
mount -o loop system_new.img.ext4 system_new
here i had a problem, i could not copy files from both indian and raw mounted images to my new ext4 image since i did not have permission to copy to the destination folder. then i made use of superuser access
gksu nautilus /path/to/image/folder
then i had full access and copied chinese rom to my new ext4 image.
cp -v -r -p chcsystem/* system_new/
then i deleted app, priv-app, font, framework, media, etc/permissions/allfiles-starting-with-android.-and-com.-and-allshare_library.xml from ext4 image.
then i manually copied these folders and permission files from indian system raw image file to my new ext4 image file
next i copy /system/lib/libandroid_runtime.so from chinese rom to the system/lib/ directory of indian rom and then deleted lib folder from chinese rom and replaced it with indian rom
then i sync files with "sync" command
then unmounted all partitions.
I then replaced system.img.ext4 file in my original rom with one that i have just made.
Now i need to compile these files back into flashable tar files with md5sum check with
tar -H ustar -c image_1 image_2 > your_odin_package.tar
md5sum -t your_odin_package.tar >> your_odin_package.tar
mv your_odin_package.tar your_odin_package.tar.md5
1. but before i do so I need some advance developer to please help me out and give some confidence as to the approach that i have used. is that correct.
2. Secondly, if someone can tell me tar ball flashing order for my rom since i heard it is important while compiling odin flashable tar file.
aboot.mbn, boot.img, cache.img.ext4, hyp.mbn, modem.bin, NON-HLOS.bin, recovery.img, rpm.mbn, sbl1.mbn, sec.dat, system.img.ext4 and tz.mbn
3. Also Is it possible that i convert system.img.ext4 into flashable odin tar file with above commands and flash only system image with Odin without messing with anyother settings.
Thank you
Click to expand...
Click to collapse
Hi waqasjeral. Have you already ported the Indian rom to the a8000?

Help needed to unpack/repack Android boot.img & system.img

Hello
I am working with a Nanopi Fire3 board. I need to change the boot logo and boot animation.
With this Android Lollipop :
112.124.9.243/dvdfiles/S5P6818/images-for-eflasher/android-lollipop-images.tgz
Click to expand...
Click to collapse
If I unpack with the following method, the new image has a completely different size and does not boot.
Code:
apt install android-tools-fsutils
simg2img rootfs.img r.img
mount -t ext4 -o loop r.img /mnt
… To Change Something …
umount /mnt
img2simg r.img rootfs.img
I have tried to root the device, no tool found online works.
I have tried to unpack/repack, no tool found online works.
Tools like mkbootimg just copies the img file (it doesn't extract anything)
I am also trying to compile android completely, and it fails in the middle of the build process.
Would you have any advice please? I have run out of options
Thank you :good:

? How to recover deleted files on rooted Android without USB Debug & PC connection?

? How to recover deleted files on rooted Android without USB Debug & PC connection?
Hello.
I have removed some important files in my DCIM folder on internal memory of my Android device. The USB socket of the phone is broken so I couldn't use any recovery software that using USB debug mode but I have Team Win I want to use the terminal of Team Win to make an image and copy it to SD Card of my Android device. I know that there is a command dd but how to use it in a proper way to make a full image of the partition including also free space.
Thank you very much in advance!
Yes, dd command could be used simmilar to this:
open terminal, cd to external SD folder
dd if=/dev/block/block/bootdevice/by-name/userdata of=data.img
or if you know number of partition
dd if=/dev/block/mmcblk0p18 of=data.img (p18 is on Huawei LDN, image size is that same as partition size 16GB/32GB/64GB..etc, so for bigger then 32GB need to use NTFS sdcard or exFAT sdcard and TWRP also has to support NTFS or exFAT).
Or edit etc/*.fstab and repack twrp. You can back up files from /data for now (as ext4 or f2fs). Just add line to back up full image of /data (as emmc).
If /data has ext4 filesystem it can easilly mount/unpack/scan/rip image. But if /data has f2fs ... got not cure.
Example:
/data f2fs /dev/block/bootdevice/by-name/userdata flags=length=-16384;backup=1;settingsstorage;encryptable=footer;
/data_image emmc /dev/block/mmcblk0p55 flags=display="Data Image";backup=1;flashimg;
adeii said:
Yes, dd command could be used simmilar to this:
open terminal, cd to external SD folder
dd if=/dev/block/block/bootdevice/by-name/userdata of=data.img
or if you know number of partition
dd if=/dev/block/mmcblk0p18 of=data.img (p18 is on Huawei LDN, image size is that same as partition size 16GB/32GB/64GB..etc, so for bigger then 32GB need to use NTFS sdcard or exFAT sdcard and TWRP also has to support NTFS or exFAT).
Or edit etc/*.fstab and repack twrp. You can back up files from /data for now (as ext4 or f2fs). Just add line to back up full image of /data (as emmc).
If /data has ext4 filesystem it can easilly mount/unpack/scan/rip image. But if /data has f2fs ... got not cure.
Example:
/data f2fs /dev/block/bootdevice/by-name/userdata flags=length=-16384;backup=1;settingsstorage;encryptable=footer;
/data_image emmc /dev/block/mmcblk0p55 flags=display="Data Image";backup=1;flashimg;
Click to expand...
Click to collapse
Thank you very much for you point to point reply!
Finally, I choose to use that option with some modifications because vfat doesn't support files larger than 4GB.
Code:
dd if=/dev/block/bootdevice/by-name/userdata conv=noerror,sync bs=100M | gzip -c | split -b1000000000 - mybackup.img.gz
I have mounted this *.img partition using OSFMount for Windows. But after the scanning process (I was using R-Studio that supports ext4 file system I found my deleted files in the tree structure /media/0/DCIM/Camera but all of the deleted files has 0 bytes size and have 2 flags: deleted, wiped.
I couldn't understand how that happened. I mean I didn't use my phone after deleting files at all. I also mounted this *.img as raw disk in Active Undelete but the result is actually the same all of the deleted files have 0 bytes file size.
Is that a bug of the program? Or I have made an image using wrong command? Or Android 9 actually wiping files after deletion?
The files have been accidentally deleted by AirDroid-web app but I don't think so that this app is wiping deleted files it doesn't make sense...
RaTr said:
Thank you very much for you point to point reply!
Click to expand...
Click to collapse
You are welcome. Thank you are for note about 4GB file size limit on vfat/fat32, will save us from a lot of headache.
---------- Post added at 10:03 AM ---------- Previous post was at 09:49 AM ----------
RaTr said:
actually the same all of the deleted files have 0 bytes file size.
Click to expand...
Click to collapse
Maybe to try DiskDigger on phone if it is rooted to scan internal sd?
PhotoRec for Windows/Linux: https://www.cgsecurity.org/wiki/PhotoRec_Step_By_Step
There are few programs to try on your image on GNU/Linux like extundelete, ext4magic, AnalyzeEXT, ext3grep ...
Source: https://askubuntu.com/questions/217606/undelete-files-on-ext4
I am trying to use ext4magic to recover deleted files. But I need a copy of the journal when I am trying to use command
Code:
debugfs -R "dump <8> /var/tmp/home.journal" /dev/mapper/home
I see that Team win terminal do not have this command how to add it or how to make a copy of the journal of my ext4 partition where I am trying to recover my files.
adeii said:
Maybe to try DiskDigger on phone if it is rooted to scan internal sd?
Click to expand...
Click to collapse
I have tried to use DiskDigger. When I am putting a filter to show only deleted files it doesn't show anything. Which is pretty strange.
adeii said:
There are few programs to try on your image on GNU/Linux like extundelete, ext4magic, AnalyzeEXT, ext3grep ...
Source: https://askubuntu.com/questions/217606/undelete-files-on-ext4
Click to expand...
Click to collapse
Next program that I have tried was TestDisk but looks like it doesn´t support ext4 file system.
Thank you for the advice about PhotoRec. It has support of ext4 system. But it won't help. So, there are still some options. I will try to use extundelete as the next one.
If you have an image of EXT4, then you can use 7-Zip Archiver to read all the files inside it.
jwoegerbauer said:
If you have an image of EXT4, then you can use 7-Zip Archiver to read all the files inside it.
Click to expand...
Click to collapse
7-Zip will show deleted files also?..
I have tried 2 more utilities:
1. ext4magic without external journal file. It has done the job but I couldn't find any files that I need.
2. extundelete that program restored less files and also no files that I want to recover.
One more strange thing:
I have installed R-Studio and opened my image there. I fount full list of my deleted files, but all of the records of my deleted files have 2 flags: deleted, wiped and it shows me that the size of that specific files is 0 bytes.
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
I have checked other files from different dates, they can be recovered, there is no flag wiped and also I can see the size, in some of them there is a flag cross-link, but I think it is normal, that means part of that file is already overwritten by another one.
RaTr said:
I have tried 2 more utilities:
1. ext4magic without external journal file. It has done the job but I couldn't find any files that I need.
2. extundelete that program restored less files and also no files that I want to recover.
One more strange thing:
I have installed R-Studio and opened my image there. I fount full list of my deleted files, but all of the records of my deleted files have 2 flags: deleted, wiped and it shows me that the size of that specific files is 0 bytes.
I have checked other files from different dates, they can be recovered, there is no flag wiped and also I can see the size, in some of them there is a flag cross-link, but I think it is normal, that means part of that file is already overwritten by another one.
Click to expand...
Click to collapse
I am stuck in the same situation bro
See it here I described the issue very similar to yours. Any luck in trying to recover that `ext4` data
RaTr said:
I found my deleted files in the tree structure /media/0/DCIM/Camera but all of the deleted files has 0 bytes size and have 2 flags: deleted, wiped.
Click to expand...
Click to collapse
expected.
emmc/ufs flash storage is handled different from hard disk drive. there is FTL controller with own firmware that is wear-leveling whole storage all the time. not to mention files are fragmented.
file system sends TRIM on each deletion of file. note the discard mount flag for userdata partition.
Android 4.3 Update Brings TRIM to All Nexus Devices
www.anandtech.com
Hi, I tried dd command, and it returned
Code:
dd: data.img: Read-only file system
But ./adb pull /dev/block/mmcblk0p57 57.img worked, and created a NDIF image.
Why dd did not work?
And which format of image would dd create?
Thanks.
you're trying to write into phones / rootdir. you cannot dump partition into phone itself. external MicroSD card or OTG pendrive is required. but you could redirect to stdout into remote file (note the quotes make the difference where > redirection is executed)
Code:
adb root
adb shell 'dd if=/dev/block/mmcblk0p57 bs=1m status=none' > data.img
open data.img file with HxD editor and have a look into first bytes. search for magic 53 ef at offset 0x438 to confirm it's ext4 image.
dd is useful in case no usb connection available (topic of thread). the result is same as adb pull. you can increase speed with block size (bs= default 512 bytes) up to 1 MB.
Note: on FDE encrypted phone one can't pull userdata directly. instead pull whatever is mounted /data (like /dev/block/dm-0)
aIecxs said:
you're trying to write into phones / rootdir. you cannot dump partition into phone itself. external MicroSD card or OTG pendrive is required. but you could redirect to stdout into remote file (note the quotes make the difference where > redirection is executed)
Code:
adb root
adb shell 'dd if=/dev/block/mmcblk0p57 bs=1m status=none' > data.img
open data.img file with HxD editor and have a look into first bytes. search for magic 53 ef at offset 0x438 to confirm it's ext4 image.
dd is useful in case no usb connection available (topic of thread). the result is same as adb pull. you can increase speed with block size (bs= default 512 bytes) up to 1 MB.
Note: on FDE encrypted phone one can't pull userdata directly. instead pull whatever is mounted /data (like /dev/block/dm-0)
Click to expand...
Click to collapse
Thanks for your reply.
What would be the differences between
adb shell 'dd if=/dev/block/mmcblk0p57 bs=1m status=none' > data.img
and
the method described in this message: https://stackoverflow.com/a/41214172 ?
Thanks.
streaming over netcat avoids unwanted characters using stty raw. on macOS probably result is no difference (after unpacking gzip).
you don't need this as you wrote adb pull worked (which is the easiest method)
aIecxs said:
streaming over netcat avoids unwanted characters using stty raw. on macOS probably result is no difference (after unpacking gzip).
you don't need this as you wrote adb pull worked (which is the easiest method)
Click to expand...
Click to collapse
Thanks.
I searched Hex in 57dd.img created by adb shell 'dd if=/dev/block/mmcblk0p57 bs=1m status=none' > 57dd.img.
It showed
Is the 53EF on line 1080 in the image above is the one you mentioned "at offset 0x438"?
right, that is ext4 magic at offset/byte hex (0x438)16 = (1080)10 dec
I have a slightly different but related question /problem. My apologies if this is not the right place to post.
On my Samsung A10e, TWRP (and other recoveries) gives me a tarfork 255 error when trying to backup userdata. Normally this should be 32GB in size from Samsung specs.
I have used two alternatives :
* adb pull /dev/block/by-name/userdata data.img which creates a 26G file on my linux PC, that I can mount and inspect. When I run filesystem check it throws out errors, probably due to some of the data being encrypted - I am running AOSP Android 11 gsi. Perhaps the same errors that prevents TWRP from working ?
* alternatively I have put in a clean 32GB SD card, then via adb shell run dd if=/dev/block/by-name/userdata of=/dev/block/mmcblk1p1 to copy the full userdata partition over to the SD card. Once removed from the phone and put in a card reader, again this can be inspected on my linux PC, and gives the same filesystem check errors. I also ran dd if=/dev/external_sd of=data2.img on my linux PC to create a similar image file as adb pull but it is now the full 32GB that I would have intially expected.
So why the size difference between adb pull and dd ?? Does adb pull actually get everything - in other words if I try and restore with adb push will the phone recover to previous state and boot ?
I was hoping to then reduce the size of my data copy to 16GB since on my phone I am only using 12GB of the 32GB, but file errors are preventing me at the moment.
I was thinking about wiping data and then with arm32 parted and adb shell creating a 16GB userdata partition and an additional 16GB user shadow partition - the latter only to be used locally via dd to do backup and restore and avoid TWRP errors.
that is very lightly due to encryption issues....esp Magisk is known to break encryption.
if you can decrypt at TWRP level and then proceed to backup user data via ADB shell to memory card that is your best bed and then wipe the partition and then restore your app data individually for apps that you need e.g. contacts db for contact an SMS. I strongly doubt if you will be able to restore that entire partition and boot to that original partition successfully.... it may have become what what we can call "encryption tainted"
excuse my typos

Categories

Resources