[HOWTO][DEV] Unpack/Pack Sony Firmware / Kernel / Initramfs (Linux Only) - Sony Xperia S, Acro S, Ion

Hello All,
I've been having multiple requests in PM lately about how to pack/unpack Sony kernels and initramfs, so I guess a little guide would help. It works for Xperia S/AcroS/Ion roms, it doesn't for XZ and later.
This is the method I use, there are others but it works quite well for me.
0) Pre-requisite
- A Linux PC or virtual machine. I presume it could be done with cygwin or other linux over windows method, but I never tried and don't recommend even trying . If you're running Windows, you can use vmware or virtualbox, you'll have much less suffering... I also strongly recommend 64 bits Linux, it helps.
- A bit of Linux knowledge, I won't go in details in how to use shell, navigate between directory, etc...
- A bit of Android knowledge, I won't explain how rom are structured.
- Sony mkelf.py script.
- my sin2raw tool: source code is here, compile it with gcc sin2raw.c -o sin2raw and put it somewhere in your PATH.
- my sksplit tool: source code is here, compile it with gcc split_sony_kernel.c -o sksplit and put it somewhere in your PATH.
- Run everything as root.
1) Stock firmware unpack
First, unpack the ftf with 7z:
Code:
7z x LT26i_6.2.B.1.96_World.ftf.
You will end up with a bunch of sin files:
Code:
amss_fs_1.sin
amss_fs_2.sin
amss_fsg.sin
system.sin
userdata.sin
cache.sin
apps_log.sin
fotakernel.sin
kernel.sin
loader.sin
partition-image.sin
sin2raw will unpack properly any of these sin. We are mostly interested in system.sin and kernel.sin in this how-to though.
2) Accessing system partition
To access system partition files,
Extract system.ext4 from system.sin
Code:
sin2raw system.sin system.ext4
mount the ext4
Code:
mkdir system
mount -o loop system.ext4 system
Files are now available in the system directory on your computer, don't forget to umount it when you're done.
3) Kernel and initramfs extract
This is probably the most interesting part for many, sksplit is doing better than many method I saw.
First, convert sin to elf:
Code:
sin2raw kernel.sin kernel.elf
Then, just run sksplit on it:
Code:
sksplit kernel.elf
It will create 3 (or 4 files for Sony kernel):
Code:
sec0-0x40208000.bin
sec1-0x41300000.bin
sec2-0x00020000.bin
sec3-0x00000000.bin
Notice the hexadecimal value, we'll use them later to rebuild the kernel.elf

4) Ramdisk/Initramfs unpack
Be careful, this has to be done as root:
Code:
mkdir cpio
cd cpio
cat ../sec1-0x41300000.bin | gzip -d | cpio -i --make-directories
Note: replace 0x41300000 with the proper value if it differs for your kernel...
If you see this in the cpio directory:
Code:
lrwxrwxrwx 1 tama tama 12 Aug 24 21:22 init -> sbin/init.sh
-rw-r--r-- 1 tama tama 280128 Aug 24 21:22 logo.rle
drwxr-x--- 2 tama tama 4096 Aug 24 21:22 sbin
with this in sbin:
Code:
-rwxr-x--- 1 tama tama 495 Aug 24 21:22 bootrec-device
-rwxr-x--- 1 tama tama 657700 Aug 24 21:22 busybox
-rwxr-x--- 1 tama tama 67020 Aug 24 21:22 extract_elf_ramdisk
-rwxr-x--- 1 tama tama 1832 Aug 24 21:22 init.sh
-rwxr-x--- 1 tama tama 589824 Aug 24 21:22 ramdisk.cpio
-rwxr-x--- 1 tama tama 2895360 Aug 24 21:22 ramdisk-recovery.cpio
The initramfs is using the new way of handling recovery used in Cyanogen and many roms. You'd need these extra steps to extract android ramdisk:
Code:
cd ..
mkdir cpio_native
cd cpio_native
cat ../cpio/sbin/ramdisk.cpio | cpio -i --make-directories
Now, you can edit/replace files in the ramdisk.
5) initramfs repack
If you are dealing with a Cyanogen like ramdisk, first do this, if not, go to next step.
Code:
find . | cpio -o -H newc > ../cpio/sbin/ramdisk.cpio
cd ../cpio
Next step is :
Code:
find . | cpio -o -H newc | gzip -c > ../initramfs.new.gz
cd ..

6) elf re-assembly
This is the easy part
You have to re-assemble all the parts together with mkelf.py.
mkelf.py -o new_kernel.elf ./[email protected]0x40208000 [email protected]0x41300000,ramdisk [email protected]0x20000,rpm
Notes:
Replace the values in red with the one sksplit gave you
If you want to change kernel (zImage), just replace ./sec0-xxx.bin with your kernel filename in the mkelf command
Don't try to add the Sony signature (sec3-xxxx), it won't work
That's it! Let me know if you need more details, I'll add them here.

* last one *

Should be a sticky in development
Thanks a lot, you have my dollar! :3
EDIT: Can you post that sksplit thingy? Or do I really need to download everything and compile it? D:
EDIT2: And do you realize us mortals only have 8 thanks per day?
Also, I tried extracting the kernel with 7zip, then unpack the '1' file with gunzip, then unpacked the /sbin/ramcisk.cpio with your method. Packaged it all up with your method and I'll edit my post to tell you if it's working

someone755 said:
Should be a sticky in development
Thanks a lot, you have my dollar! :3
EDIT: Can you post that sksplit thingy? Or do I really need to download everything and compile it? D:
Click to expand...
Click to collapse
Yes, download the source code, it's one file only, and compile it. It avoids troubles with 32/64 bits runtimes:
type this:
Code:
wget https://gitorious.org/sony-tools/sony-tools/blobs/raw/master/split_sony_kernel.c
gcc split_sony_kernel.c -o sksplit
it will download and generate directly sksplit.
if you need sin2raw, just type this:
Code:
wget https://gitorious.org/sony-tools/sony-tools/blobs/raw/master/sin2raw.c
gcc sin2raw.c -o sin2raw

Nah, I'm using 7zip. Don't have the patience for downloads and compiles on my slow internet/PC combo

someone755 said:
Nah, I'm using 7zip. Don't have the patience for downloads and compiles on my slow internet/PC combo
Click to expand...
Click to collapse
Bad idea!
Source is less than 10 KB and takes like 10 seconds to compile. With it, you're absolutely sure that extracted sizes are exact up to the byte, and sksplit will give you the right mkelf offsets, the matching rpm.bin, etc... 7z extract could fail to extract the complete file and could not work depending on compression scheme.

letama said:
Bad idea!
Source is less than 10 KB and takes like 10 seconds to compile. With it, you're absolutely sure that extracted sizes are exact up to the byte, and sksplit will give you the right mkelf offsets, the matching rpm.bin, etc... 7z extract could fail to extract the complete file and could not work depending on compression scheme.
Click to expand...
Click to collapse
Yep, managed to compile and make a flashable zip of 39 baseband just using friend's PC Linux distro with my phone. Ssh owns Compilation process didn't take more than quarter of a second, same with sin2raw repacking.
Powered by GSR with Android 4.1.2 on the board.

Okay, did that. Hope the Sense kernel works now
EDIT: Also tried doing this with my own kernel, but it won't boot. Now could this be because I added -03 to the wrong places or because of your method...?

someone755 said:
Okay, did that. Hope the Sense kernel works now
EDIT: Also tried doing this with my own kernel, but it won't boot. Now could this be because I added -03 to the wrong places or because of your method...?
Click to expand...
Click to collapse
Difficult to say, there are so many cause for not booting...
I'd suggest to try something simple at first to make sure your process is ok, like for instance modifying CM initramfs and check if it still runs after repack You can simply add a comment to init.rc for instance and check that it's there after boot.

letama said:
4) Ramdisk/Initramfs unpack
If you see this in the cpio directory:
Code:
lrwxrwxrwx 1 tama tama 12 Aug 24 21:22 init -> sbin/init.sh
-rw-r--r-- 1 tama tama 280128 Aug 24 21:22 logo.rle
drwxr-x--- 2 tama tama 4096 Aug 24 21:22 sbin
with this in sbin:
Code:
-rwxr-x--- 1 tama tama 495 Aug 24 21:22 bootrec-device
-rwxr-x--- 1 tama tama 657700 Aug 24 21:22 busybox
-rwxr-x--- 1 tama tama 67020 Aug 24 21:22 extract_elf_ramdisk
-rwxr-x--- 1 tama tama 1832 Aug 24 21:22 init.sh
-rwxr-x--- 1 tama tama 589824 Aug 24 21:22 ramdisk.cpio
-rwxr-x--- 1 tama tama 2895360 Aug 24 21:22 ramdisk-recovery.cpio
Click to expand...
Click to collapse
I don't have those directiories, I have
Code:
Data (empty)
Dev (empty)
Proc (empty)
res (has charging graphic)
sbin (has none of mentioned above files, no ramdisk)
sys (empty)
system (empty)
and bunch of standalone files
what now? I want to replace zImage with mine, compiled from source.
I tried to decode other bin files but program failed.
Oh, I see it's if I want to edit ramdisk.
I don't want to edit ramdisk, I just want to add kernel I compiled from source.
So I should exe command like this?:
Code:
mkelf.py -o new_kernel.elf [email protected] [email protected],ramdisk [email protected],rpm
Those were my outputs:
Code:
... dumping sec0-0x00208000.bin
... dumping sec1-0x01400000.bin
... dumping sec2-0x00000000.bin
... dumping sec3-0x00000000.bin
I run that command and now I have new_kernel.elf file ( 5,8 MB ) but I am afraind of flashing it into my device. Is it safe if everything went without errors?

lozohcum said:
I don't have those directiories, I have
Code:
Data (empty)
Dev (empty)
Proc (empty)
res (has charging graphic)
sbin (has none of mentioned above files, no ramdisk)
sys (empty)
system (empty)
and bunch of standalone files
So basically you directly have initramfs content, recovery is not embedded and you can stop there if you wanted to modify initramfs. As you don't, forget about this...
So I should exe command like this?:
Code:
mkelf.py -o new_kernel.elf [email protected] [email protected],ramdisk [email protected],rpm
Those were my outputs:
Code:
... dumping sec0-0x00208000.bin
... dumping sec1-0x01400000.bin
... dumping sec2-0x00000000.bin
... dumping sec3-0x00000000.bin
I run that command and now I have new_kernel.elf file ( 5,8 MB ) but I am afraind of flashing it into my device. Is it safe if everything went without errors?
Click to expand...
Click to collapse
What device is that ?
Basically, what you're trying to do is almost good, but I'm pretty sure sec2 or sec3 are not rpm.
Can you give me the sizes of each sec-xxx file, the size of the elf, and the size of your zImage ?
Regarding your last question, no, it's not safe for something else than XS/AcroS/Ion...

letama said:
Can you give me the sizes of each sec-xxx file, the size of the elf, and the size of your zImage ?
Click to expand...
Click to collapse
And one last thing, can you tell me what displays sksplit when you unpack the elf ?

@letama
It's Xperia J. Kernel is compiled from official source given by sony developers.
Here are sizes:
{
"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"
}
And split log:
Code:
ELF magic found
Entry point : 0x00208000
Program Header start : 0x34
Program Header size : 32
Program Header count : 4
-> PH[0], type=1, offset=00001000, virtual=00208000, phy=00208000, size=4310432
-> PH[1], type=1, offset=0041D5A0, virtual=01400000, phy=01400000, size=1313163
-> PH[2], type=4, offset=0055DF2B, virtual=00000000, phy=00000000, size=512
-> PH[3], type=558778707, offset=000000B4, virtual=00000000, phy=00000000, size=1072
... dumping sec0-0x00208000.bin
... dumping sec1-0x01400000.bin
... dumping sec2-0x00000000.bin
... dumping sec3-0x00000000.bin
So how other people compile kernel for this device? FXP has their own CM10 kernel, Rachit Rawat made his kernel based on open source given by sony developers too.
And this is my repo:
https://github.com/lozohcum/Kernel-JLO-JB

lozohcum said:
So how other people compile kernel for this device? FXP has their own CM10 kernel, Rachit Rawat made his kernel based on open source given by sony developers too.
Click to expand...
Click to collapse
Ok, Xperia J is different SOC, it doesn't have rpm.bin
cat you do a cat sec2-0x00000000.bin ?
I suspect it's kernel command line.
If I'm right, you should try this first:
Code:
mkelf.py -o new_kernel.elf [email protected] [email protected],ramdisk [email protected],cmdline
And try to flash it. It will be the same kernel, but at least we can be sure the extraction and rebuild is working.
If everything is ok, you can do this:
Code:
mkelf.py -o new_kernel.elf [email protected] [email protected],ramdisk [email protected],cmdline
This time it will be your kernel...
*edit*
I found this regarding your device, a bit more complicated than working with sin and elf like here, but it kind of confirms what I said, basically he does manually what sksplit does.

Are you asking if I can do this?
Code:
[email protected]:/home/lozohcum/android/buildpackage/dir# cat ../sec2-0x00000000.bin | gzip -d | cpio -i --make-directories
gzip: stdin: not in gzip format
cpio: unexpected end of archive
as you see I can't, same with all other bin files. I can cat only the one you mentioned in tutorial.
I'm going to try what you said, I hope it won't birck my phone.
The tutorial you found is freaking me out...
After I exed
Code:
mkelf.py -o new_kernel.elf [email protected] [email protected],ramdisk [email protected],cmdline
There is a new_kernel.elf which is 0.2MB lighter than the first one...
I'm like
omgomgomg
I flashed that kernel and it works pretty well.
Now I am going to use kernel I compiled and if it works I will add some governors and OC

lozohcum said:
Are you asking if I can do this?
[email protected]:/home/lozohcum/android/buildpackage/dir# cat ../sec2-0x00000000.bin | gzip -d | cpio -i --make-directories
Click to expand...
Click to collapse
No, simply
Code:
cat ../sec2-0x00000000.bin
This is probably text file.
The tutorial you found is freaking me out...
Click to expand...
Click to collapse
I know, it's a bit complicated, but that's because he doesn't have sksplit and sin2raw. He does that manually, by dumping flashed kernel first then finding the right location.
There is a new_kernel.elf which is 0.2MB lighter than the first one...
Click to expand...
Click to collapse
That's ok, you don't have Sony signature, and you shouldn't have it.
I flashed that kernel and it works pretty well.
Click to expand...
Click to collapse
Good! Method is working then, let me know if your own kernel works.

Operation successfull! Kernel I've compiled works.
Thank you very much for help, you restored my faith in people on this forum
Carrying on, here is an issue. After installing it, my phone is laggy, even very laggy. On the previous kernel my phone was very fast and smooth.
Do you have maybe any advice?
what about patch from this thread? Where can I read about removing rubbish from kernel and etc?

lozohcum said:
Operation successfull! Kernel I've compiled works.
Thank you very much for help, you restored my faith in people on this forum
Carrying on, here is an issue. After installing it, my phone is laggy, even very laggy. On the previous kernel my phone was very fast and smooth.
Do you have maybe any advice?
what about patch from this thread? Where can I read about removing rubbish from kernel and etc?
Click to expand...
Click to collapse
Nice!
Ok, so now you have the method. Regarding kernel, well, I don't know why yours is laggy. Maybe a toolchain issue, what are you using to compile it ? I usually use Google toolchains. Depending on kernel version, I use gcc 4.3.3 or 4.6.0. You should check dmesg on stock kernel to see what version Sony used (third line or so in dmesg will show you kernel version and toochain used).

Related

Google Android and Linux for Kaiser Volume II

The original thread:http://forum.xda-developers.com/showthread.php?t=396782 needs an abridged version.
==================================================
Go to http://www.androidonhtc.com/ if you're just starting as it has the latest info. This thread is to highlight the info from the original thread only.
Latest Builds
Port Status
==================================================
Compiling Android Kernel for Kaiser
Modify initrd.gz files and CPIO handling
system.img mounting, editing and rebuilding with ext2/3
system.img mounting, editing and rebuilding with cramfs
Howto: Pull from git (new/update/resync)
[WIP] Configuring WiFi Interface
==================================================
system.img mounting, editing and rebuilding with ext2/3
seidler2547: Post:
Actually I've played with Android a bit for now, and I changed to ext3. It doesn't only work - it's much faster, too! Startup time during the blinking android is about half of what it was before.
How-To:
Code:
Code:
cd /tmp
# prepare dirs
mkdir a-sys
mkdir a-ext
# prepare image
dd if=/dev/zero of=/where/is/sdcard/system.img.new bs=1M count=64
mkfs.ext3 /where/is/sdcard/system.img.new
# mount old image and copy to new
mount -o loop /where/is/the/system.img a-sys
mount -o loop /where/is/sdcard/system.img.new a-ext
cp -a a-sys/* a-ext/
Now you can unmount the old image and happily edit in the new image. Don't forget to rename the system.img.new to system.img (after you have unmounted it).
In your initrd, in file init, where it says
Code:
losetup /dev/block/loop1 /sdcard/system.img
...
mount -t cramfs -o ro,noatime,nodiratime /dev/block/loop1 /system
change "-t cramfs" to "-t ext2" or "-t ext3". You can also change the path (/sdcard/system.img) there.
Click to expand...
Click to collapse
Modify initrd.gz files and CPIO handling
dcordes: Post:
There is no magick in the initrd files. They are .cpio.gz files, gzipped cpio balls. To extract a .cpio.gz file named initrd-android.cpio.gz simply do
Code:
gunzip initrd-android.cpio.gz && cpio -i < initrd.android.cpio
Then you have the extracted rootfs. The reverse way would be, assuming you are inside your rootfs folder:
Code:
find ./ | cpio -H newc -o | gzip > ../my-initr-android-with-custom-stuffs.cpio.gz
And yes, you can remove and add applications you find that way.
Click to expand...
Click to collapse
system.img mounting, editing and rebuilding with cramfs
dzo: Post:
Hi, you can't just use mkcramfs on the system folder because the permissions will be wrong. This is the script I use:
Code:
Code:
out/host/linux-x86/bin/genext2fs -d out/target/product/generic/system -b 80000 -a system.ext2
mount -o loop system.ext2 /mnt/system
cp /mnt/system/usr/keychars/qwerty2.kcm.bin /mnt/system/usr/keychars/vogue-ts.kcm.bin
cp com.google.android.maps.jar /mnt/system/framework
cp Maps.apk Street.apk /mnt/system/app
mkfs.cramfs /mnt/system system.img
umount /mnt/system
#pcp system.img :/Storage\ Card/system.img
This also puts the maps app in (just copy from one of my images) and the vogue keymap. Without the source for the ril you will also need to copy my RIL (libreference-ril.so).
Click to expand...
Click to collapse
[WIP] Configuring WiFi Interface
This has been able to initialize the interface, assign arbitrary IP addresses but can not go further at the moment.
Code:
# ifconfig tiwlan0 192.168.1.100
# ifconfig tiwlan0 up
error: SIOCSIFFLAGS (Cannot assign requested address)
# ifconfig tiwlan0
tiwlan0: ip 192.168.1.100 mask 255.255.255.0 flags (down broadcast multicast)
dmesg will show:
Code:
wlan: no version for "struct_module" found: kernel tainted.
TIWLAN: Driver loading
trout_wifi_power: 1
trout_wifi_reset: 0
trout_wifi_set_carddetect: 1
TIWLAN: Found SDIO control (vendor 0x104c, device 0x9066)
TIWLAN: Driver initialized (rc 0)
TIWLAN: Driver loaded
Android's built-in wireless settings seem to disable the interface beyond just interfering with it, therefore it's best to stay with terminal and using 'ash' will give you a shell with command history (up/down scroll).
markya23: Post:
Need to create a folder in you system image package called /etc/wifi and copy tiwlan.ini, wpa_supplicant.conf and fw1251r1c.bin.
Need to copy the wlan.ko to /lib/modules in the system image (create the dir if required).
Create the new system image and boot Android. Start the dev console and type:
Code:
cp /system/etc/wifi/wpa_supplicant.conf /data/misc/wifi/wpa_supplicant.conf
insmod /system/lib/modules/wlan.ko
wlan_loader -f /system/etc/wifi/Fw1251r1c.bin -e /proc/calibration -i /system/etc/wifi/tiwlan.ini
cd /data/local/tmp
wpa_supplicant -f -Dtiwlan0 -itiwlan0 -c/data/misc/wifi/wpa_supplicant.conf &
ifconfig tiwlan0 192.168.1.100 netmask 255.255.255.0
ifconfig tiwlan0 up
Click to expand...
Click to collapse
Compiling Android Kernel for Kaiser
dwaradzyn: Post:
Here are brief instructions on how to compile android kernel for Kaiser from git.linuxtogo.org repository. I assume that running OS is Linux and it has everything required to build x86 or ia64 kernel. Beside that latest git software should be installed. The shell is assumed to be bash.
1. Let's start with creating a directory for kernel in home directory:
Code:
mkdir ~/android-kernel
cd android-kernel
2. Next thing is to get the sources from repository. To make it happen (this could take a while, it downloads 280MB):
Code:
git clone git://git.linuxtogo.org/home/groups/mobile-linux/kernel.git
OUTPUT:
Code:
Initialized empty Git repository in /home/user/android-kernel/kernel/.git/
remote: Counting objects: 908251, done.
remote: Compressing objects: 100% (153970/153970), done.
remote: Total 908251 (delta 755115), reused 906063 (delta 753016)
Receiving objects: 100% (908251/908251), 281.86 MiB | 292 KiB/s, done.
Resolving deltas: 100% (755115/755115), done.
Checking out files: 100% (22584/22584), done.
3. The htc-msm branch is of our interest (again it could take a few seconds):
Click to expand...
Click to collapse
*** Update, poly_poly-man states we are working off of htc-vogue not htc-msm. I'm leaving the original code here but I would urge you to modify the next line as poly has suggested:
Code:
cd kernel
git checkout -b htc-msm origin/htc-msm
OUTPUT:
Code:
Branch htc-msm set up to track remote branch refs/remotes/origin/htc-msm.
Switched to a new branch "htc-msm"
4. Let's take care of arm toolchain. Download this file (64MB) into ~/android-kernel:
Code:
[url]http://www.codesourcery.com/gnu_toolchains/arm/portal/package2549/public/arm-none-linux-gnueabi/arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2[/url]
Unpack it:
Code:
cd ~/android-kernel
tar xjf arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
5. Compile the kernel
Prepare default .config for Kaiser:
Code:
cd ~/android-kernel/kernel
make htckaiser_defconfig ARCH=arm
OUTPUT:
Code:
........
lots of output
........
# configuration written to .config
#
And finally compile the kernel to get zImage (takes a minute or two):
Code:
export PATH=~/android-kernel/arm-2008q1/bin:$PATH
make zImage ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
OUTPUT:
Code:
........
lots of output
........
Kernel: arch/arm/boot/zImage is ready
Now copy ~/android-kernel/kernel/arch/arm/boot/zImage to your phone and play with it.
Some ending tips:
A. You can compile earlier versions of sources in repository. To do that click on one of "commit" links on page:
Code:
http://git.linuxtogo.org/?p=groups/mobile-linux/kernel.git;a=summary
and read commit id (for example: f9d1bcea9342348623f5a57588044f76d8b649cd):
Code:
git reset --hard f9d1bcea9342348623f5a57588044f76d8b649cd
It will override any changes you made to files in ~/android-kernel/kernel.
B. Once you have downloaded git repository, you can swallow latest changes by issuing:
Code:
cd ~/android-kernel/kernel
git pull
C. If your machine has more than one cpus/cores you can speed up kernel compilation by adding -j <cores/cpus_number>, for example (dual core):
Code:
make -j 2 zImage ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
Click to expand...
Click to collapse
bad internet makes for double post. Please delete
wrong directions for kernel - we are working off of htc-vogue branch... not htc-msm...
can we make the internet work through the usb cable?
how does android know which device node is gps? it's not picking it up for kaiser...
if you enable gps in winmo (or enable it in smd0 - I believe the command is @startgps), smd7 is a nmea stream (acts as a serial GPS).... could a symlink possibly be the right solution to this?
Howto: Pull from git (new/update/resync)
This will download the latest from git:
dwaradzyn: Post:
Here are brief instructions on how to compile android kernel for Kaiser from git.linuxtogo.org repository. I assume that running OS is Linux and it has everything required to build x86 or ia64 kernel. Beside that latest git software should be installed. The shell is assumed to be bash.
1. Let's start with creating a directory for kernel in home directory:
Code:
mkdir ~/android-kernel
cd android-kernel
2. Next thing is to get the sources from repository. To make it happen (this could take a while, it downloads 280MB):
Code:
git clone git://git.linuxtogo.org/home/grou
ps/mobile-linux/kernel.git
OUTPUT:
Code:
Initialized empty Git repository in /home/user/android-kernel/kernel/.git/
remote: Counting objects: 908251, done.
remote: Compressing objects: 100% (153970/153970), done.
remote: Total 908251 (delta 755115), reused 906063 (delta 753016)
Receiving objects: 100% (908251/908251), 281.86 MiB | 292 KiB/s, done.
Resolving deltas: 100% (755115/755115), done.
Checking out files: 100% (22584/22584), done.
3. The htc-msm branch is of our interest (again it could take a few seconds):
Code:
cd kernel
git checkout -b htc-msm origin/htc-msm
OUTPUT:
Code:
Branch htc-msm set up to track remote branch refs/remotes/origin/htc-msm.
Switched to a new branch "htc-msm"
4. Let's take care of arm toolchain. Download this file (64MB) into ~/android-kernel:
Code:
http://www.codesourcery.com/gnu_toolchains/arm/portal/package2549/public/arm-none-linux-gnueabi/arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
Unpack it:
Code:
cd ~/android-kernel
tar xjf arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
5. Compile the kernel
Prepare default .config for Kaiser:
Code:
cd ~/android-kernel/kernel
make htckaiser_defconfig ARCH=arm
OUTPUT:
Code:
........
lots of output
........
# configuration written to .config
#
And finally compile the kernel to get zImage (takes a minute or two):
Code:
export PATH=~/android-kernel/arm-2008q1/bin:$PATH
make zImage ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
OUTPUT:
Code:
........
lots of output
........
Kernel: arch/arm/boot/zImage is ready
Now copy ~/android-kernel/kernel/arch/arm/boot/zImage to your phone and play with it.
Some ending tips:
A. You can compile earlier versions of sources in repository. To do that click on one of "commit" links on page:
http://git.linuxtogo.org/?p=groups/mobile-linux/kernel.git;a=summary
and read commit id (for example: f9d1bcea9342348623f5a57588044f76d8b649cd):
Code:
git reset --hard f9d1bcea9342348623f5a57588044f76d8b649cd
It will override any changes you made to files in ~/android-kernel/kernel.
B. Once you have downloaded git repository, you can swallow latest changes by issuing:
Code:
cd ~/android-kernel/kernel
git pull
C. If your machine has more than one cpus/cores you can speed up kernel compilation by adding -j <cores/cpus_number>, for example (dual core):
Code:
make -j 2 zImage ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
Click to expand...
Click to collapse
poly_poly-man: Post:
This will pull from git which will update/resync a git pull:
Code:
mkdir foo
cd foo
git init
git pull git://git.linuxtogo.org/home/groups/mobile-linux/kernel.git htc-vogue
Click to expand...
Click to collapse
I'll follow-up with some nice, full instructions...
1. prerequisites: arm-none-linux-gnueabi toolchain (gentoo users can use crossdev - otherwise.... uhh... idk?), git, a host toolchain (gentoo users have this by default, most other distros have this under "development" in their package managment... if you have gcc, you're probably set).
2. mkdir kernel
cd kernel
git init
git pull git://git.linuxtogo.org/home/groups/mobile-linux/kernel.git htc-vogue
3. make vogue_defconfig
4. make
5. cp arch/arm/boot/bzImage /path/to/sdcard/
6. to update, run the git pull command by itself again, run make (may have to do the config line again if it's changed) and cp.
Thanks for the post poly. I don't know how that's different from what the post I referenced as I'm not +4 at this stuff.. I did what you posted with android kernel from git and got a 1.2mb zImage that crashed HaRET.. I'm guessing this is my bad. What could I have overlooked? Thanks
enatefox said:
Thanks for the post poly. I don't know how that's different from what the post I referenced as I'm not +4 at this stuff.. I did what you posted with android kernel from git and got a 1.2mb zImage that crashed HaRET.. I'm guessing this is my bad. What could I have overlooked? Thanks
Click to expand...
Click to collapse
where'd you get your toolchain?
does building a regular (host arch) kernel work?
Also - what's the proper way to build a system.img by hand? I'm looking to modify that quite a bit, but can't find a persistent source tree besides the main one, which is seriously crippled.
I thought you were one of the experts, lol. I've been left with no support on how dzo, et all are customizing kernels so I've been in read only mode on the 'other thread' looking elsewhere for support.
Just wanted to ask you first, what's with the Dream radio? I know you posted the mods censored it but what's with the sig now? It piqued my interest... as I'm using (shudder) winmo on the regular while Android is being worked on I was hoping it would be worth looking into if it doesn't brick my phone.
Answers to your questions:
As I said, my own zImage is no go. Check this link (not for our phone but the links at the bottom are pretty useful): http://wiki.xda-developers.com/index.php?pagename=BlackstoneLinux#Runningx20.Linuxx20.onx20.blackstone
I got the toolchain from the steps I (re)posted on this thread:
http://forum.xda-developers.com/showpost.php?p=2269384&postcount=184 so that gave me a 1.2mb zImage where everyone's been posting 1.4mb-- I know there's something not right. As far as building a system.img by hand? I've taken existing ones either from posted bundles or from Android src directly. Maybe I suck (real possibility) but cupcake and 1.0 have been pretty flaky for me (there are system.img's included in the source). You should know how to mount and edit them though (look at the first post on this thread). My experience is the git source is useless unless you've got a G1-- I don't know how to make it run on Tilts. If it does work, then the answer to your question about host arch compiling is no-- it has to be ARMv5 for our phones. That's where this line comes in:
make zImage ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
Click to expand...
Click to collapse
Seriously, I need help learning how to modify the kernel-- I've been a "google will have the answer for me" Linux bystander for a while and while I'm good at what I've done I'm not so good at this uncharted territory. I'm really looking for help to figure out how to compile modules (saurik and dzo never got back to me about that) and all I've gotten is "wait while I do it myself" which is cool they're working on it but we're obviously here to work on it too.
I've even been trying to get Debian installed (familiar territory for me) so I can at least get stuff working. You do know that Android is nothing but a Java VM layer for Linux and it will (could be) put on any self-respecting distro. Personally, I want Debian on my phone with an Android chroot as that would trump all.
Sorry to rant but you seem more about figuring this out like me and I don't know who else is really working on this besides the dev-gods who have no tutorials.
enatefox said:
I thought you were one of the experts, lol. I've been left with no support on how dzo, et all are customizing kernels so I've been in read only mode on the 'other thread' looking elsewhere for support.
Just wanted to ask you first, what's with the Dream radio? I know you posted the mods censored it but what's with the sig now? It piqued my interest... as I'm using (shudder) winmo on the regular while Android is being worked on I was hoping it would be worth looking into if it doesn't brick my phone.
Click to expand...
Click to collapse
It never actually worked... maybe. My phone was reporting the wrong version on a *different* radio (1.65.21.18, was saying 19) before, and trying to flash this changed the version to be correct. 0x300 radios will never flash, and this as a 0x301 *will* brick your phone. Then again... like 2 people reported epic success... In other words, no, it never really existed.
Answers to your questions:
As I said, my own zImage is no go. Check this link (not for our phone but the links at the bottom are pretty useful): http://wiki.xda-developers.com/index.php?pagename=BlackstoneLinux#Runningx20.Linuxx20.onx20.blackstone
I got the toolchain from the steps I (re)posted on this thread:
http://forum.xda-developers.com/showpost.php?p=2269384&postcount=184 so that gave me a 1.2mb zImage where everyone's been posting 1.4mb-- I know there's something not right. As far as building a system.img by hand? I've taken existing ones either from posted bundles or from Android src directly. Maybe I suck (real possibility) but cupcake and 1.0 have been pretty flaky for me (there are system.img's included in the source). You should know how to mount and edit them though (look at the first post on this thread). My experience is the git source is useless unless you've got a G1-- I don't know how to make it run on Tilts. If it does work, then the answer to your question about host arch compiling is no-- it has to be ARMv5 for our phones. That's where this line comes in:
make zImage ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
Click to expand...
Click to collapse
unnecessary - zImage is implied, and the other two are in the Makefile already.
Seriously, I need help learning how to modify the kernel-- I've been a "google will have the answer for me" Linux bystander for a while and while I'm good at what I've done I'm not so good at this uncharted territory. I'm really looking for help to figure out how to compile modules (saurik and dzo never got back to me about that) and all I've gotten is "wait while I do it myself" which is cool they're working on it but we're obviously here to work on it too.
Click to expand...
Click to collapse
we have 0 modules at the moment (but perhaps support - I forget). Just compile stuff in - modules are very bad.
I've even been trying to get Debian installed (familiar territory for me) so I can at least get stuff working. You do know that Android is nothing but a Java VM layer for Linux and it will (could be) put on any self-respecting distro. Personally, I want Debian on my phone with an Android chroot as that would trump all.
Click to expand...
Click to collapse
It's a nice idea, but remember where a lot of the current coding is taking place - the ril, which is part of android (the system.img, at least), and doesn't go across to other distros quite as well. I think running Dalvik alongside whatever you're running in Debian might be too much for this phone's epically slow processor (compared to msm7201a).
Sorry to rant but you seem more about figuring this out like me and I don't know who else is really working on this besides the dev-gods who have no tutorials.
Click to expand...
Click to collapse
my instructions should work - they are what I use, at least.
Someone should change the instructions to (in the Wiki they are correct):
make ARCH=arm vogue_defconfig
I compiled my kernel, booted in Ubuntu, but had no touchscreen at all, I am not sure if the vogue_defconfig file takes care of everything necessary, so now I am checking everything via menuconfig to see whether eveything is all right or not.
DOMy
Do not Use Ext3 on SD cards
enatefox said:
seidler2547: Post:
Click to expand...
Click to collapse
You should NOT be using ext3 on any sort of flash ram device. You will wear out the medium. Journaling is just a bad idea in this sort of situation.
http://www.handhelds.org/hypermail/familiar/273/27320.html
3) ext3 is "very bad" because of the way it does journaling. It does journal, which seems like a good idea, but it also automatically periodically writes a lot of things out to the same secors on disk. I don't have first hand experience with this, but I remember somebody familiar with ext3 writing about this. It's method of journaling is not particularly intended for any kind of wear leveling at all.
Click to expand...
Click to collapse
http://www.mail-archive.com/[email protected]/msg38988.html
There are three disadvantages with the journaled file system:
- lower performance at write time, since there is the extra work of the
journal
- increased chance of damaging the SD card due to extra use of the
journal causing wearing
- increased space usage (for the journal)
Click to expand...
Click to collapse
And this is the general consensus within most of linux on ext3 and wearing mediums. I'm not sure if Andriod's kernel can do ext4, but ext4 can run without a journal.
Yet another reason not to use ext3 is that is near impossible to undelete something, something you can do with ext2.
-edit-
It looks like Android can use Ext4
http://thatsbadass.com/android/tag/ext4/
haha! is a good job, i like it
can't run android on my kaiser
hi folks,
i have read many threads here and on androidonhtc.com, i have read also the install instructions, but it seems im too stupid to run it.
it fails on "can't find system.img". i wil not flash it, i will run it from sd-card.
so, please can anyone attached an actually zip file which i just unpack und run haret.exe to work android on my kaiser ?
thanks and best regards
lenzen

SGS zImage format

In an other thread in this section I've read that the kernel and ramdisk of the SGS can be extracted from /dev/block/bml7. Unexpectedly I can't split the Android bootimage with a Script I've found on the net (android-dls[dot]com/wiki/index.php?title=HOWTO:_Unpack%2C_Edit%2C_and_Re-Pack_Boot_Images).
I would be glad if someone could tell me how to split the zImage to the kernel and the initramfs and to merge these two things together again.
To the best of my knowledge:
zImage is not the same as android boot image:
* zImage used by samsung in the firware files is regular Linux kernel zImage with compiled-in initramfs
* boot.img usually used in other android phones is a packed kernel + initramfs
Looking around the web I found this regarding zImage: http://en.gentoo-wiki.com/wiki/Initramfs#Extracting_the_cpio_archive
(was interested in this myself to be able to modify init.rc and maybe change the partition types to YAFFS2 instead of RFS)
With that Gentoo Wiki entry I could unpack the kernel image:
Code:
grep -a -b --only-matching `perl -e'print "\x1F\x8B\x08"'` zImage
13348
I extracted the image with
Code:
dd if=zImage bs=1 skip=13348 | gunzip > Image
In the kernel image I found a zip header
Code:
grep -a -b --only-matching `perl -e'print "PK\x03\x04"'` Image
and extracted that one. But I can't unzip the extracted file. What did I do wrong?
gshklover said:
(was interested in this myself to be able to modify init.rc and maybe change the partition types to YAFFS2 instead of RFS)
Click to expand...
Click to collapse
I was looking at doing exactly the same thing. Maybe mimocan can help us with the procedure to edit the init.rc file because he created a new kernel which could be flashed using ODIN.
I don't know how to find the initramfs image from the "Image"... It doesn't seem to be compressed though.
But it is definitely there. Just try "strings Image | grep "mount rfs" - it appears to have the contents of the /init.rc file as-is... Now just need to find where the initramfs starts and how to extract and re-pack it...
I guess, when building a new kernel (like others do) this shouldn't be an issue - you can probably extract the files by copying / with "samefs" flag and then building a new kernel with initramfs path set to the directory with the contents.
Here the idea was to "patch" official Samsung's firmware... Maybe not such a bright idea after all as it would be easier just to build a new kernel.
Thanks for your reply gshklover. Are there any guides on how to build a new kernel for the SGS? I would really like to edit that init.rc file.
Go to opensource.samsung.com -> Mobile -> GT-I9000 and download the sources.
It has build-kernel.sh script now. (haven't tried that myself, but there are other threads about this on this forum).
BTW: it appears that unlike other architectures, ARM's ./linux-2.6.29/arch/arm/kernel/vmlinux.lds.S doesn't define a section for the initramfs - only two symbols that get exported into the kernel (start and end). On x86 for example, the whole thing is also marked as a ".init.ramfs" section.
gshklover said:
Go to opensource.samsung.com -> Mobile -> GT-I9000 and download the sources.
It has build-kernel.sh script now. (haven't tried that myself, but there are other threads about this on this forum).
BTW: it appears that unlike other architectures, ARM's ./linux-2.6.29/arch/arm/kernel/vmlinux.lds.S doesn't define a section for the initramfs - only two symbols that get exported into the kernel (start and end). On x86 for example, the whole thing is also marked as a ".init.ramfs" section.
Click to expand...
Click to collapse
Thanks for the tip. I'm downloading the kernel now. The transfer speed is really slow. I'm sort of new to kernel hacking. Is there a place where I should look to edit the init.rc script before compiling it?
As far as I know the new Samsung kernel sources are configured to not include an initrd directory. In the old sources that configuration option was enabled but now its gone.
shelldude said:
With that Gentoo Wiki entry I could unpack the kernel image:
Code:
grep -a -b --only-matching `perl -e'print "\x1F\x8B\x08"'` zImage
13348
I extracted the image with
Code:
dd if=zImage bs=1 skip=13348 | gunzip > Image
In the kernel image I found a zip header
Code:
grep -a -b --only-matching `perl -e'print "PK\x03\x04"'` Image
and extracted that one. But I can't unzip the extracted file. What did I do wrong?
Click to expand...
Click to collapse
On my captivate model I had no luck finding the PK header. Instead I followed the gentoo wiki link and searched again for another gz header within Image.
Code:
grep -a -b --only-matching `perl -e'print "\x1F\x8B\x08"'` Image
157408:‹
I extracted the compressed Image and piped it to gzip then finally cpio:
Code:
dd if=Image bs=1 skip=157408 | gzip -d -c | cpio -t
/system.prop
/init.smdkc110.sh
/tmp
/tmp/s3c-keypad.kcm.bin
/tmp/bootchart
/tmp/bootchart/stgloc
/tmp/s3c-keypad.kl
/fota.rc
/dev
/dev/stgloc
/lpm.rc
/proc
/proc/stgloc
/init.smdkc110.rc
/init
/system
/system/etc
/system/etc/ld.so.cache
/.info
/.info/rootfs.info
/sys
/sys/stgloc
/etc
/mnt
/mnt/.lfs
/mnt/.lfs/test
/lib
/lib/modules
/lib/modules/s3c_lcd.ko
/lib/modules/fsr_stl.ko
/lib/modules/drop_caches.ko
/lib/modules/fsr.ko
/lib/modules/scsi_wait_scan.ko
/lib/modules/pvrsrvkm.ko
/lib/modules/s3c_bc.ko
/lib/modules/stgloc
/lib/modules/rfs_fat.ko
/lib/modules/dhd.ko
/lib/modules/Si4709_driver.ko
/lib/modules/vibrator.ko
/lib/modules/param.ko
/lib/modules/multipdp.ko
/lib/modules/j4fs.ko
/lib/modules/rfs_glue.ko
/lib/modules/dpram.ko
/sbin
/sbin/ffdisk
/sbin/dfta
/sbin/adbd
/sbin/fdump
/sbin/init
/sbin/devmgr
/sbin/recovery
/sbin/ferase
/sbin/redbend_ua
/sbin/fat.format
/sbin/dfta.sh
/sbin/images
/sbin/images/icon.png
/sbin/dprw
/res
/res/images
/res/images/indeterminate1.png
/res/images/indeterminate2.png
/res/images/icon_installing.png
/res/images/icon_firmware_error.png
/res/images/indeterminate6.png
/res/images/progress_bar_empty.png
/res/images/indeterminate5.png
/res/images/icon_firmware_install.png
/res/images/icon_error.png
/res/images/progress_bar_left_round.png
/res/images/progress_bar_empty_right_round.png
/res/images/indeterminate3.png
/res/images/progress_bar_empty_left_round.png
/res/images/progress_bar_right_round.png
/res/images/progress_bar_fill.png
/res/images/indeterminate4.png
/init.rc
/recovery.rc
/default.prop
gzip: stdin: decompression OK, trailing garbage ignored
13304 blocks
It appears that different firmwares are built with different options.
JM2 that I'm currently using has the initramfs uncompressed.
I uploaded the script that extracts the initramfs from such an image here: http://forum.xda-developers.com/wiki/index.php?title=Extract_initramfs_from_zImage
Feel free to extend the page with more info / scripts for different firmwares (personally, I find that Forums are not ideal for organizing information... WIKI seems like a better place).
I've just tried many time to dump the bml7 from my offical ZSJPE/JPD.
However, I have no luck that none of the below pattern match in my bml7.img
Code:
grep -a -b --only-matching $'\x1F\x8B\x08' bml7.img
grep -a -b --only-matching $'PK\x03\x04' bml7.img
grep -a -b --only-matching '070701' bml7.img
I've also tried few script on xda and cpio with no success.
I must miss something otherwise my device use some other encoding.
0x1F8B08 zip header can be found at offset 0x4794 After decompressing you can find a cpio header at offset 0x286C0. Basically...with only a hex editor and 7zip you'll get an extracted initramfs image.
hkdennis2k said:
I've just tried many time to dump the bml7 from my offical ZSJPE/JPD.
However, I have no luck that none of the below pattern match in my bml7.img
Code:
grep -a -b --only-matching $'\x1F\x8B\x08' bml7.img
grep -a -b --only-matching $'PK\x03\x04' bml7.img
grep -a -b --only-matching '070701' bml7.img
I've also tried few script on xda and cpio with no success.
I must miss something otherwise my device use some other encoding.
Click to expand...
Click to collapse
That's one interesting zImage.. I'm guessing it's bzip2 compressed. Will check it out.
vM00 said:
0x1F8B08 zip header can be found at offset 0x4794 After decompressing you can find a cpio header at offset 0x286C0. Basically...with only a hex editor and 7zip you'll get an extracted initramfs image.
Click to expand...
Click to collapse
Oh, thanks. I can now extract them manually. Just wondering why all the script and why my "grep" does not work as expected.
BTW, I use archlinux. I am not sure does it matter.

[MOD] SHW-M110S Development (with lagfix/root/voodoo sound kernel)

For SHW-M110s development/discussion. (Korean Anycall SGS ONLY yes for any who don't know, we are officially part of the I9000 forum.
Koe1974 suggested this thread and will I think act as a co-OP on this discussion. Look for front page updates, links, whatever from him 3 posts down, (below the lost guy from China) in the future too.
Version 4 released
Version 4.0r1 released to fix Odin flashing problem
link to kernel
with tegrak_voodoo sound (v2) module, tegrak ext4 module, root (superuser.apk) and busybox 1.17.1 optional, safe mount option overides by default, auto detect lag fixed partitions (improves upgradeability and interchageability) [/B][/size] Compatible with previously z4modded ext2 setups. All ROM versions, SK05 through TA13 tested and released (link is below).
안녕하세요 to any of the Korean developers who find this. Please update us in English about what you are doing. Your English is probably MUCH better than my korean, and I live in Korea.. There are some people in China, Iran, Philippines, etc using this device who might be helped.
-------------------------------------------------------------------------------------------------------------------------
Ext4 (tegrak modules) z4build rooted voodoo sounds kernel link
A stock z4moded kernel with added ext4 support ( presently by "stealing" tegrak kernel modules.) and many tweaks to make it actually work.
This is now working with z4control to get an easy to apply ext4 lag fix!
------------------------------------------------------------------------------------------------------------------------------------
Bug discussion here please, usage discussion (how do get the file into odin?) .. maybe the general thread is better.
For now, our rooting guide is linked from my sig also, although the above linked kernel can also be made to provide root with no effort.
This type of initramfs modification can be done by unpacking a stock kernel making customizations and then applying z4build to it. But I used a z4modded kernel and then applied customizations and repacked. I did this because I set up to repack by hand anyway before knowing I wanted to use z4mod and even then, when I thought I needed to pack into a tegrak kernel (which z4build can't do). It turned out to cause complications, but also taught me a good bit about the process and about z4mod, and probably helped me find bugs.
Some other related useful links for Reference:
kernel extraction (commented by me specifically for tegrak lzma compressed initramfs and z4build split initramfs)
http://forum.xda-developers.com/wiki/index.php?title=Extract_initramfs_from_zImage
kernel repacking
http://forum.xda-developers.com/showthread.php?t=789712
It needs the initramfs to be cpio'd already something like this:
Code:
cd $initram
find ./ | cpio -H newc -o > $repackdir/newramfs.cpio
It also needs the editor.sh script modified to point to the cross-compiler.
By default it can only pack you initramfs into an image which previously had an uncompressed initramfs. This can be modified though easily.
kernel compiling
This old thread probably isn't too useful now..
http://forum.xda-developers.com/showthread.php?t=740740&page=2
We have much better info 3 posts down by koe1974.
Kernel sources here:
http://opensource.samsung.com/
search SHW-M110S.
The first froyo update has a nice readme with a link to the compiler (I don't have the link right this moment)
Not sure if we need to figure/find .configs, or if the ones included are ok to start. Just need to compile one once and see.
I got my compiler toolchain here:
http://www.codesourcery.com/sgpp/li...1-188-arm-none-eabi-i686-pc-linux-gnu.tar.bz2
I thought it's the one recommended is the original froyo source from samsung, but Koe says they point to 2009 version, so I don't know now.
............
I flashed the korean voodoo sk22 kernel just to boot it into recovery. It has CW mod recovery. Might be useful. (BTW I don't recommend flashing unfamiliar kernels haphazardly, ex: this one injected a file into my ROM that interefered with z4mod until I realized it ) Mine BTW injects only one empty directory (/etc/init.d) and nothing else. Remove the kernel and all other changes dissappear. (z4control adds a tad more, but very little, most of its additions self destruct after use.)
Post reserved.
Post Removed, as requested.
Sent from my GT-I9000 using XDA App
Links:
Korea's equivalent to XDA
Lilinser's GitHub - kernel repack, deodexer, etc.
Project-Voodoo - initramfs (SK05)
Just for hobbies - Voodoo for SL28
Tegrak Kernel
SHW-M110S intramfs Requires further research.
Older M110S from someone at MIT working on the M110S potential resource
bml7 & initramfs possible resource
more initramfs
initramfs SK05 Tested .. OK
How-Tos:
Basic How-To Build Environment with built kernel test
First this diff is from a z4modded stock SL28 image to the custom kernel image. It's not against stock. So it includes tegrak files and scripts I changed. Also note the -N option. It pretends like files that don't exist do.. Any binary files that "differ" are actually added from tegrak.
Code:
diff -rbpN z4mod_sl28/initramfs/init.rc z4grak-construction-sl28/initramfs/init.rc
*** z4mod_sl28/initramfs/init.rc 2011-01-13 02:20:12.000000000 -0500
--- z4grak-construction-sl28/initramfs/init.rc 2011-01-11 07:43:34.000000000 -0500
*************** loglevel 3
*** 58,63 ****
--- 58,72 ----
mount j4fs /dev/block/stl6 /mnt/.lfs
insmod /lib/modules/param.ko
+ #ext4 modules by woo
+ insmod /tegrak/lib/modules/mbcache.ko
+ insmod /tegrak/lib/modules/jbd2.ko
+ insmod /tegrak/lib/modules/ext4.ko
+
+ # tegrak system lagfix by woo
+ #
+ insmod /tegrak/lib/modules/tegrak_module.ko
+
# Backwards Compat - XXX: Going away in G*
symlink /mnt/sdcard /sdcard
*************** service vt /system/bin/vtserver
*** 728,734 ****
#user system
#group system
-
service dumpstate /system/bin/dumpstate -s
socket dumpstate stream 0660 shell log
disabled
--- 737,742 ----
*************** service dumpstate /system/bin/dumpstate
*** 739,747 ****
# oneshot
-
# Added by z4mod
service z4postinit /init
oneshot
--- 747,761 ----
# oneshot
# Added by z4mod
service z4postinit /init
oneshot
+ #install root ingore the mount type, it doesn't matter
+ # syntax looks a little strange to me.. we'll see if it works
+ mount rfs /dev/block/stl9 /system rw remount
+ cat /sbin/su > /system/bin/su
+ chown root /system/bin/su
+ chmod 4755 /system/bin/su
+ mount rfs /dev/block/stl9 /system ro remount
\ No newline at end of file
diff -rbpN z4mod_sl28/initramfs/lpm.rc z4grak-construction-sl28/initramfs/lpm.rc
*** z4mod_sl28/initramfs/lpm.rc 2011-01-13 02:20:12.000000000 -0500
--- z4grak-construction-sl28/initramfs/lpm.rc 2011-01-11 06:37:28.000000000 -0500
*************** on init
*** 16,21 ****
--- 16,26 ----
insmod /lib/modules/param.ko
insmod /lib/modules/vibrator.ko
+ #ext4 modules by woo
+ insmod /tegrak/lib/modules/mbcache.ko
+ insmod /tegrak/lib/modules/jbd2.ko
+ insmod /tegrak/lib/modules/ext4.ko
+
mount rfs /dev/block/stl9 /system check=no
mount rfs /dev/block/mmcblk0p2 /data nosuid nodev check=no
Binary files z4mod_sl28/initramfs/sbin/sslvpn and z4grak-construction-sl28/initramfs/sbin/sslvpn differ
Binary files z4mod_sl28/initramfs/tegrak/bin/mkfs.ext4 and z4grak-construction-sl28/initramfs/tegrak/bin/mkfs.ext4 differ
Binary files z4mod_sl28/initramfs/tegrak/bin/tune2fs and z4grak-construction-sl28/initramfs/tegrak/bin/tune2fs differ
Binary files z4mod_sl28/initramfs/tegrak/lib/modules/ext4.ko and z4grak-construction-sl28/initramfs/tegrak/lib/modules/ext4.ko differ
Binary files z4mod_sl28/initramfs/tegrak/lib/modules/jbd2.ko and z4grak-construction-sl28/initramfs/tegrak/lib/modules/jbd2.ko differ
Binary files z4mod_sl28/initramfs/tegrak/lib/modules/mbcache.ko and z4grak-construction-sl28/initramfs/tegrak/lib/modules/mbcache.ko differ
Binary files z4mod_sl28/initramfs/tegrak/lib/modules/tegrak_module.ko and z4grak-construction-sl28/initramfs/tegrak/lib/modules/tegrak_module.ko differ
I'm a bit confused about sslvpn It's in my SL28 , it's not in my z4moded SL28. everything else diff as expected. Maybe I just lost it, maybe z4mod removed it. It's a small unimportant mystery.
BTW it looks like what I believe are the recovery keys have changed from SK22 to SL28, so maybe using the wrong kernel breaks something.
and my slightly modified version of the extraction script with commented lines to deal with lzma.
it's much faster (well.. why not), and it handles direcories a little better. It need a "/" somewhere in the file name though so use "./zImage".
Code:
#!/bin/bash
#MUCH faster than dd bs=1 skip=blah
#
# syntas is fastdd file skip <length_in_bytes_optional>
# skip is NOT optional and should be set to 0 read from begining.
#
fastdd () {
#dd with a skip is crazy slower cause it forces bs=1
#credit goes to somebody on the internet.
local bs=1024
local file=$1
local skip=$2
local count=$3
(
dd bs=1 skip=$skip count=0 2>/dev/null
if [[ "$count" != "" ]]; then
dd bs=$bs count=$(($count / $bs))
dd bs=$(($count % $bs)) count=1
else
dd bs=1024 2> /dev/null
fi
) < "$file"
}
zImage=$1
basedir=${1%/*}
echo working directory $basedir
mkdir $basedir/initramfs
outdir=$basedir/initramfs/
#========================================================
# find start of gziped kernel object in the zImage file:
#========================================================
pos=`grep -P -a -b -m 1 --only-matching $'\x1F\x8B\x08' $zImage | cut -f 1 -d :`
echo "-I- Extracting kernel image from $zImage (start = $pos)"
echo
echo "*** Start of compressed kernel image:" $pos
#========================================================================
# the cpio archive might be gzipped too, so two gunzips could be needed:
#========================================================================
fastdd $zImage $pos | gunzip > /tmp/kernel.img
pos=`grep -P -a -b -m 1 --only-matching $'\x1F\x8B\x08' /tmp/kernel.img | cut -f 1 -d :`
#
# Use next one for tegrak secuere 11 SL28
# It's an lzma header
# It's found by looking for 5D 00 in the exact same place as cpio (070701) is found in stock.
# The long string of FF's is the real give away since 5D 00 is too vague.
# pos=`grep -P -a -b -m 1 --only-matching '\x{5D}\x{00}\x..\x{FF}\x{FF}\x{FF}\x{FF}\x{FF}\x{FF}' /tmp/kernel.img| cut -f 1 -d :`
echo
echo "*** gzip position in kernel.img :" $pos "(start of gzipped cpio)"
#===========================================================================
# find start and end of the "cpio" initramfs image inside the kernel object:
# ASCII cpio header starts with '070701'
# The end of the cpio archive is marked with an empty file named TRAILER!!!
#===========================================================================
if [ ! $pos = "" ]; then
echo "-I- Extracting compressed cpio image from kernel image (start = $pos)"
# use either one of the next two lines for gzip
# dd if=/tmp/kernel.img bs=1 skip=$pos | gunzip > /tmp/cpio.img
fastdd /tmp/kernel.img $pos |gunzip > /tmp/cpio.img
# comment above and uncomment one of next two lines for lzma, if decompressing tegrak image.
# dd if=/tmp/kernel.img bs=1 skip=$pos | unlzma > /tmp/cpio.img
# fastdd /tmp/kernel.img $pos | unlzma > /tmp/cpio.img
start=`grep -a -b -m 1 --only-matching '070701' /tmp/cpio.img | head -1 | cut -f 1 -d :`
end=`grep -a -b -m 1 --only-matching 'TRAILER!!!' /tmp/cpio.img | head -1 | cut -f 1 -d :`
inputfile=/tmp/cpio.img
else
echo "-I- Already uncompressed cpio.img, not decompressing"
start=`grep -a -b -m 1 --only-matching '070701' /tmp/kernel.img | head -1 | cut -f 1 -d :`
echo start $start
end=`grep -a -b -m 1 --only-matching 'TRAILER!!!' /tmp/kernel.img | head -1 | cut -f 1 -d :`
echo end $end
inputfile=/tmp/kernel.img
fi
end=$((end + 10))
count=$((end - start))
if (($count < 0)); then
echo "-E- Couldn't match start/end of the initramfs image."
exit
fi
echo "-I- Extracting initramfs image from $inputfile (start = $start, end = $end)"
echo inputfile: $inputfile
echo start $start
echo count $count
echo outdir $outdir
# dd if=$inputfile bs=1 skip=$start count=$count > $outdir/initramfs.cpio
fastdd $inputfile $start $count > $basedir/initramfs.cpio
cd $basedir
basedir=`pwd`
cd $outdir; cpio -v -i --no-absolute-filenames < $basedir/initramfs.cpio
cp /tmp/kernel.img $basedir/
More to come.
I like the way this is going, appagom, please put [MOD] in the title.
GL on the new thread, if you hope to have Koreans stumbled upon the thread it might be good to add more phrases like:
루팅
갤럭시s
안드로이드
프로요
업그레이드
업데이트
I never really fully utilized it myself. I hope you get more done here or I'll just take the move personally. Actually, now that you guys were moving into compiling and building I thought this would come. Also, you should look to get some Soju out of this with some donate links or something, even if you aren't looking to take in any cash perhaps you could use it as a seed pot for bounties.
Most importantly, I need to know what "the lost guy from China" said...ㅋㅋㅋ
@Koe, don't waste your time on Gingerbread, get us Honeycomb
Compile a Kernel in 13 Lucky Steps
If you are not familiar with Linux, you might have a hard time following this. Just as I am writing how to do get setup to compile a kernel and compile Android apps, others have written how to setup VirtualBox, Ubuntu, AndroidSDK, etc. Please see documentation provided by Oracle, Google, Ubuntu, etc. before you ask for help about VirtualBox, Ubuntu and the SDK. Thanks.
This is written for people who have used Linux but have not compiled much. Or for the brave at heart who are looking for a nice weekend project. This will tell/guide you through getting a system setup that will not destroy your existing OS.
My host OS is Ubuntu 10.10 64-bit. I wanted had to make an Ubuntu 10.04 32-bit 64-bit system for development because I didn't want to deal with 64-bit vs. 32-bit issues but since Gingerbread requires a 64-bit compiler, I had to. Might as well just use my host system, but since we're here let's keep going!
So you're about to begin. Let's just get one thing straight. No! This will not result in a kernel you can flash. “Then why do this?, you ask. Ask yourself that!
1. Install VirtualBox and the Oracle VM VirtualBox Extension Pack (Currently 4.0.0 r69151)
http://www.virtualbox.org/wiki/Downloads
2. Download an Ubuntu ISO (I suggest Ubuntu Desktop 10.04 64-bit)
http://www.ubuntu.com/desktop/get-ubuntu/download
3. Create a new VM in VirtualBox (You may/have to modify the settings)
Operating System: Linux
Version: Ubuntu64
Extended Features: IO APIC
Processors: 2
RAM: 2048MB
Video Mem: 128MB
HDD: 32GB
Enable PAE/NX
Shared Drive: (I use a shared folder, more detail later)
Click to expand...
Click to collapse
4. Install VirtualBox Guest Additions
5. Install Ubuntu and Update Ubuntu
TIP: Mount your Shared Folder with fstab (Optional but helpful)
If you chose to use a shared folder you can auto-mount it via /etc/fstab.
NOTE: I use a shared folder named andDEV and I mount it on my desktop (~/Desktop). Below is what I add to my /etc/fstab (You may/have to change it)
Code:
andDev /home/koe/Desktop/andDev vboxsf uid=1000,gid=1000 0 0
Click to expand...
Click to collapse
6. Enable multiverse and partner "Software Sources"
7. Install additional software: NOTE: I would also recommend installing preload, but it is not required.
Code:
sudo apt-get install qt3-dev-tools texinfo git-core gnupg flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev sun-java6-jdk eclipse ia32-libs
8. Get and Setup the AndroidSDK (Everything you need to know is there or just Google for help)
http://developer.android.com/sdk/index.html
NOTE: Ubuntu 10.04 does not have Java 5 in it's repositories. Follow this link to setup to Java 5
9. Get and Setup ADT Plugin for Eclipse (Everything you need to know is there or just Google for help)
http://developer.android.com/sdk/eclipse-adt.html#installing
TIP: At this point you might want to try Google's “Hello, Android” tutorial.
Click to expand...
Click to collapse
10. Download and Install the Sourcery G++ Lite for ARM EABI Toolchain (Currently arm-2010.09)
http://www.codesourcery.com/sgpp/lite/arm/portal/subscription3053
Look for and click the link for Recommended Release
Look for and click the link for IA32 GNU/Linux TAR
Extract the archive. You will have a folder named arm-2010.09
Make a directory in your home directory named CodeSourcery
Ex. mkdir ~/CodeSourcery
copy the entire arm-2010.09 folder into CodeSourcery
Click to expand...
Click to collapse
11. Update your $PATH
You should be familiar with this because you had to do it to setup the AndroidSDK
Append the following to your PATH in .bashrc
Code:
~/CodeSourcery/arm-2010.09/bin
12 Download and Prepare the Samsung Source Code (Currently SHW-M110S_Opensource_Froyo_update2.zip)
http://opensource.samsung.com/
Click Mobile - Mobile Phones
Look for and download SHW-M110S_Opensource_Froyo_update2.zip
Extract the archive. Inside the new folder are two more archives.
Extract SHW-M110S_Kernel.tar.gz Inside there is a new folder Kernel
You can copy this to a more convenient location. I copy it to my desktop.
In the Kernel folder is a file named Makefile. Open it with your editor of choice.
Go to line 184. You will see ...
CROSS_COMPILE ?= /opt/toolchains/arm-2009q3/bin/arm-none-linux-gnueabi-
You have to change it to something like below, but see the koe? That is my username so you have to change it to your username.
CROSS_COMPILE ?= /home/koe/CodeSourcery/arm-2010.09/bin/arm-none-eabi-
Save Makefile.
Click to expand...
Click to collapse
13. Compile a Kernel
NOTES:
1. Do not try to compile the code in your Shared Folder. It will fail.
2. When issuing these commands you will see lots of output during this part, most of which is not useful to you at this point.
3. The amount of time it takes for the final make command to run will depend on your computer.
Click to expand...
Click to collapse
Open a terminal window and move into the Kernel directory. Issue the following commands.
Code:
$ make shw-m110s_defconfig
$ make menuconfig
When the config editor opens do the following:
DOWN ARROW to Userspace binary formats and press ENTER
DOWN ARROW to Kernel support for a.out and ECOFF binaries and press SPACE
RIGHT ARROW to Exit and press ENTER
RIGHT ARROW to Exit and press ENTER
Press ENTER again and it will exit back to the command line
NOTE: If you have a powerful computer and you want to speed up the build time, make can be run as, make -j# The # represents how much it will try to do at once. $ make does 1 operation, make -j3 tries to do 3. I have a 2.66 Ghz dual-core CPU and I allow the VirtualBox guest OS access to both cores, so I use make -j3 The compile finishes in about 12 minutes and allows me to still use my host OS. For now, you might just want to run make without the -j option to get a full understanding of how long it takes. Later you can test with values.
Click to expand...
Click to collapse
WARNING: Time is relative. This will take some time ... go make a sandwich or maybe even watch a movie.
Code:
$ make
When you see $ again check the last couple of lines of output. You want to see …
OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready
Click to expand...
Click to collapse
Congratulation! You just built a kernel for the m110s!
good write up.. Glad to see you hit the same a.out snag as me. Just makes me think it's not configured right and so I have low hopes. Will be fun to see what happens when you put an initramfs in it. I'd just unpack the stock one and try that first.
As for z4control.. I'm pretty interested in getting this working as something like this was the real reason I started messing with this. It seems there may be some issue with the z4mod's init wrapper not doing things it should but anyway.. just now seeing issues. flashed one kernel where I added some debug output added.. trying to understand it (not understanding it yet). I'm optimistic that I can track it down. edit:... definitely making progress, not quite there yet but getting closer.
appagom said:
good write up.. Glad to see you hit the same a.out snag as me. Just makes me think it's not configured right and so I have low hopes. Will be fun to see what happens when you put an initramfs in it. I'd just unpack the stock one and try that first.
Click to expand...
Click to collapse
Strictly to see if it would build completely and to get more info on how to do it, I did do an initramfs & kernel test build.
used the update2 kernel source
used the initramfs linked above (SHW-M110S intramfs Requires further research.)
ran find ./ | cpio -H newc -o > ~/Desktop/newramfs.cpio
added the cpio via menuconfig with no compression
It did build successfully and I ended up with a 7mb zImage vs. a 2.5mb.
There is no way in hell I am going to flash it because I do not know which initramfs (maybe from sk05) it is or what it contains but it did complete.
Now isn't this a kick in the nuts!
Since I got the toolchain all set I decided to focus on the Android source code. Following these directions .. http://source.android.com/source/download.html I got to "Building the code"
Code:
[email protected]:~/Desktop/myAnd$ source build/envsetup.sh
including device/htc/passion/vendorsetup.sh
including device/samsung/crespo/vendorsetup.sh
[email protected]:~/Desktop/myAnd$ lunch
You're building on Linux
Lunch menu... pick a combo:
1. full-eng
2. full_x86-eng
3. simulator
4. full_passion-userdebug
5. full_crespo-userdebug
Which would you like? [full-eng] 1
============================================
PLATFORM_VERSION_CODENAME=AOSP
PLATFORM_VERSION=AOSP
TARGET_PRODUCT=full
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=false
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv5te
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=OPENMASTER
============================================
[email protected]:~/Desktop/myAnd$ make
============================================
PLATFORM_VERSION_CODENAME=AOSP
PLATFORM_VERSION=AOSP
TARGET_PRODUCT=full
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=false
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv5te
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=OPENMASTER
============================================
Checking build tools versions...
build/core/main.mk:76: ************************************************************
build/core/main.mk:77: You are attempting to build on a 32-bit system.
build/core/main.mk:78: Only 64-bit build environments are supported beyond froyo/2.2.
build/core/main.mk:79: ************************************************************
build/core/main.mk:80: *** stop. Stop.
Well, 32-bit will do for now seeing how ::cough:: I'm not the one building gingerbread.
I guess my next how-to is going to be how to go out and buy a PC and setup a 64-bit development environment.
Well, 32-bit will do fro now see how ::cough:: I'm not the one building gingerbread.
I guess my next how-to is going to be how to go out and buy a PC and setup a 64-bit development environment.
Click to expand...
Click to collapse
Could try the gnu cross compiler I suppose maybe it's clever enough to work around it. Your computer really isn't 64 bit though? You could just install a 64 bit VM assuming it is.
koe1974 said:
added the cpio via menuconfig with no compression
Click to expand...
Click to collapse
Ok, that procedure is easier than it used to be, or than what I read it used to be. I'm not afraid to add one and flash it. Just busy with making one I like right now though.. then again.. sounds like a 10 minute interruption.. so.. we'll see... oh and I don't remember what was stopping xconfig from working, but something annoying.. it's quite a bit nicer than menuconfig. I need to learn how that works though.. cause really you should add modules from the compilation itself right.. so you cant have the initramfs already before you compile, unless make opens it and add the modules and re-cpio's it. Anyway.. I'll shoot first, ask later.
edit: just flashed.. it gave about 1 tenth of a blue bar and froze. Ok, that was fun, back to fixing and ext4 kernel up.
appagom said:
Could try the gnu cross compiler I suppose maybe it's clever enough to work around it. Your computer really isn't 64 bit though? You could just install a 64 bit VM assuming it is.
Click to expand...
Click to collapse
The VM I setup was 32bit, but it's 64bit now. I will just modify the How-To for a 64bit system.
4 bugs related z4control issues solved(ok 2 were probably the same as well as a fifth, so really 3)..
one, it's failing to create a directory it needs (/system/etc/init.d), reported, work around create by hand.
2) It's rfs formatting wrapper script which checked for voodoo, failed. Strange bug in sh actually.. workaround in script found and reported
bugs 3 and 4 details unimportant, were related to the mystery of where sslvpn went. z4build was splitting the initramfs by tacking it some of it brute force on to the end of the zImage. The init script found it again and unpacked the files before continuing. Oddly, it seems an uneeded because I fit the only big displaced file in just fine without splitting and I didn't even use heavy compression. Anyway, needed or not it caused two files to go missing, this one, and a small text file that reported the version of z4mod. this file prevented z4control from working.
I will not fix this tonight, but I mostly understand it (altough not in exact detail of precisely understanding some of the odd symptoms, but I think dealing with this will likely solve it all) My diffs could never find the version file, cuase I never unpacked it to know it even existed in the first place. Waaaah.. bug tracking is tiring. We should have this all running very shortly.
update: my first attempt at fixing the repacking bug.. resulted (I already feared this but hoped it would just go away) in a kernel that seems totaly complete, but where it seems something in the init wrapper isn't working... getting closer to finding it.
update: LAST BUG FIXED
The last bug(which I previously assumed was part of the repack bug) was actually aslo part of z4build, now documented here:
http://forum.xda-developers.com/showpost.php?p=10638535&postcount=1062
I'm pretty sure that one should really get it all going now. there are no lines of code left to break. I've tested almost every line now. I'll get a new kernel out, but will need to wait for an updated z4control. z4ziggy seems busy right now maybe (no complaint obviously).
I can fix this last bug in my roll out of the kernel. The other remaining ones can be worked around pretty easily, but not pretty for user instructions, better to wait probably.
SK05 Rebuild test (PASS)
We have doubts about if the shw-m110s_defconfig is what is used by samsung so I decided to try to make a working kernel from an initramfs and froyo_update source code.
General idea of what I did...
sk05 source code froyo_update (from samsung)
sk05 initramfs (link in post 4 "initramfs SK05 Tested .. OK")
cd initramfs_dir
find . -print0 | cpio -o0 -H newc | gzip -9 -f > some/path/initramfs.cpio.gz
cd kernel source code root directory
modify Makefile ln. 184
make aries_android_rfs_defconfig
make menuconfig
disable a.out
add path to initramfs archive
compression gzip
make
tar --format=ustar SK05rebuilt.tar zImage
Click to expand...
Click to collapse
Results in a zImage the same size (4.6mb) as samsung's, and it boots.
awesome..
I GOT IT
That was big fat B to solve. Debugging self destructing scripts that run in a startup environment with different mounts and different PATH variable is no fun and requires some imagination. I had to work around 2 more bugs in z4build but now I have user transparent workarounds to all of them.. plug and play. Unfortunately I have about 30 minutes more free time today so I probably wont post it today. I should clean up some comments and such in it first probably. We'll see.
appagom said:
awesome..
I GOT IT
Click to expand...
Click to collapse
Very nice!
Sent from my SHW-M110S using XDA App
the "awesome" comment was referring to you. Should be able to take the grak of z4grak with some compiling , but I'm happy with it in too.. doesn't matter.
Anyway.. I updated the kernel page (from the link on OP). The new kernel is there, but I pushed it out very fast. Didn't flash last repack myself yet after changing comments.. but I only changed comments. (I am running the posted copy now) It needs testing since my system has gotten a been used and non-pristine. Get z4control, you can use it to flash it if you want. the rest is all push button I hope.
Oh and default settings are less safe than Tegrak, not much if any better than ext2 actually. I think.. can't confirm right now. I recommend modifying etc/fstab to data=ordered,barrier=1 personally.. but that's what I like about z4.. you can decide for yourself.
Sent from my SHW-M110S using XDA App

[REF] zImage Initramfs

Very basic guide to extract the initramfs from the zImage, as well as a dump of the initramfs inside I9100XEKDB firmware.
Q: Why? This is simple!
A: Might help someone out!
Linux Bash script follows (standard initramfs extract script) :
Code:
pos=`grep -F -a -b -m 1 --only-matching $'\x1F\x8B\x08' zImage | cut -f 1 -d :`
dd status=noxfer if=zImage bs=$pos skip=1 2>/dev/null| gunzip -q > kernel.img
start=`grep -F -a -b -m 1 --only-matching '070701' kernel.img | head -1 | cut -f 1 -d :`
dd status=noxfer if=kernel.img bs=$start skip=1 > initramfs.img 2>/dev/null
mkdir initramfshere
cd initramfshere
cpio -i --no-absolute-filenames < ../initramfs.img
ls -l
I9100XEKDB initramfs: http://www.sgscompilebox.dreamhosters.com/initramfs.tar.gz
Repacking should be easy as well, but I haven't tried to boot a kernel I have repacked myself yet. Since Chainfire has a root kernel posted, it should work without issue though -- and these are standard linux kernels after all.
Grab the kernel repacker from http://www.sgscompilebox.dreamhosters.com/repacker.tar.gz
Following bash script to use it:
Code:
end=`repacker/findcpio.pl kernel.img | cut -f 2`
(cd initramfshere/; find . | cpio --quiet -R 0:0 -H newc -o > ../newinitramfs.img)
gzip -f9c newinitramfs.img > newinitramfs.img.gz
repacker/kernel_repacker.sh zImage newinitramfs.img.gz
Might need some tweaking depending on your system, but this will hopefully get you started. You can use this to create your own root kernels as Chainfire has done, or modify as you want. Refer to the Q&A above!
Hi,
You can also find Samsung unmodified Galaxy S II initramfs on github, contributions welcome for missing ones:
https://github.com/GalaxySII/initramfs-galaxysii
Its repository collections is for every developer, and is not project/people specific: https://github.com/GalaxySII/
This is what Samsung should give us directly.
Related post, with reference Kernel source repository: http://forum.xda-developers.com/showthread.php?t=1054738
RyanZA said:
Very basic guide to extract the initramfs from the zImage, as well as a dump of the initramfs inside I9100XEKDB firmware.
Q: Why? This is simple!
A: Might help someone out!
Linux Bash script follows (standard initramfs extract script) :
Code:
pos=`grep -F -a -b -m 1 --only-matching $'\x1F\x8B\x08' zImage | cut -f 1 -d :`
dd status=noxfer if=zImage bs=$pos skip=1 2>/dev/null| gunzip -q > kernel.img
start=`grep -F -a -b -m 1 --only-matching '070701' kernel.img | head -1 | cut -f 1 -d :`
dd status=noxfer if=kernel.img bs=$start skip=1 > initramfs.img 2>/dev/null
mkdir initramfshere
cd initramfshere
cpio -i --no-absolute-filenames < ../initramfs.img
ls -l
I9100XEKDB initramfs: http://www.sgscompilebox.dreamhosters.com/initramfs.tar.gz
Repacking should be easy as well, but I haven't tried to boot a kernel I have repacked myself yet. Since Chainfire has a root kernel posted, it should work without issue though -- and these are standard linux kernels after all.
Grab the kernel repacker from http://www.sgscompilebox.dreamhosters.com/repacker.tar.gz
Following bash script to use it:
Code:
end=`repacker/findcpio.pl kernel.img | cut -f 2`
(cd initramfshere/; find . | cpio --quiet -R 0:0 -H newc -o > ../newinitramfs.img)
gzip -f9c newinitramfs.img > newinitramfs.img.gz
repacker/kernel_repacker.sh zImage newinitramfs.img.gz
Might need some tweaking depending on your system, but this will hopefully get you started. You can use this to create your own root kernels as Chainfire has done, or modify as you want. Refer to the Q&A above!
Click to expand...
Click to collapse
Hi..I notice there's an embedded kernel in the packer directory, but the path is an older version than the actual one in zimage. Is third just for pearl script purposes? Thanks
Sent from my GT-I9100
Hey RyanZA,
Following your script
> cpio -i --no-absolute-filenames < ../initramfs.img
extracts initramfs but gives me the error:
cpio: ../init: Cannot symlink to 'sbin-ueventd': Operation not permitted
Can you help a linux newbie here ? Do I need to be root?
EDIT: Ah! I think I know now... FAT does not support symlinks Going to ext...
Ok got the initramfs extracted from a zImage. Used repacker to create the zImage again. Did not change anything in initramfs. Filesize 5mb vs 8mb for the original. After a closer look I see that original contains lots of zeros. Ok appended zeros to match filesize and flashed the 'new' kernel. No go. Yellow triangle and no boot. Waited a long time.
Can anyone help? Maybe the repacker does something wrong? Maybe it should not compress?
Sent from my GT-I9100 using XDA Premium App
Anybody had any luck with this?
After said tweaking to get the repacker script running I got it to build a new zImage.
But mine was even only ~2MB small.... (seeing that the extracted initramfs summs up to about 3MB it makes at least a bit of sense, but still wondering).
Also the older kernel used (.29 against .35 that's actually running on my phone) makes me ....
Well, flashed it anyway but (as expected) it didn't work, phone showed the bootlogo and that's it, not even recovery worked.
So, is it the older kernel? Or is it forking up the initramfs image creation?
Or is there another way to rebuilt the kernel image with a new initramfs image?
I'd really like to get rebuilding the zImage working so I toy around with that a bit, try to make my own root kernel and all that funstuff
HellcatDroid said:
Anybody had any luck with this?
After said tweaking to get the repacker script running I got it to build a new zImage.
But mine was even only ~2MB small.... (seeing that the extracted initramfs summs up to about 3MB it makes at least a bit of sense, but still wondering).
Also the older kernel used (.29 against .35 that's actually running on my phone) makes me ....
Well, flashed it anyway but (as expected) it didn't work, phone showed the bootlogo and that's it, not even recovery worked.
So, is it the older kernel? Or is it forking up the initramfs image creation?
Or is there another way to rebuilt the kernel image with a new initramfs image?
I'd really like to get rebuilding the zImage working so I toy around with that a bit, try to make my own root kernel and all that funstuff
Click to expand...
Click to collapse
the fist script actually works good to pull initramfs. but I don't know about the repacker...better to build new
Yeah, trying to build a new kernel from sources at the moment (make is running as I type this).
Here's an idea why the rebuilder fails:
.29 kernel (that the rebuild script brings in and uses) but the initramfs has .35 version kernel modules (as it's for/from the .35 kernel)!
Not sure how delicate this version missmatch is, but there's a chance the one or the other important kernel module erroring out upon boot due to the version missmatch....
Well, let's see if a full build from sources works (as I know my luck, it won't....)....
that's because zImage has SFX code which tied very much to data (Image.gz). So you cannot just re-pack it back to existing zImage. You have to download source code of i9100 kernel and execute final part of kernel build where Image binary gets compressed and pre-pended by sfx header.
RyanZA said:
Following bash script to use it:
Code:
end=`repacker/findcpio.pl kernel.img | cut -f 2`
(cd initramfshere/; find . | cpio --quiet -R 0:0 -H newc -o > ../newinitramfs.img)
gzip -f9c newinitramfs.img > newinitramfs.img.gz
repacker/kernel_repacker.sh zImage newinitramfs.img.gz
Click to expand...
Click to collapse
err... the repacker/kernel_repacker.sh script only takes one argument.. how is it supposed to work???
sorg said:
that's because zImage has SFX code which tied very much to data (Image.gz). So you cannot just re-pack it back to existing zImage. You have to download source code of i9100 kernel and execute final part of kernel build where Image binary gets compressed and pre-pended by sfx header.
Click to expand...
Click to collapse
Yeah, that is actually what the repacker script does!
It has precomplied objects and compiles/links them together to the final (new) zImage.
saturn_de said:
err... the repacker/kernel_repacker.sh script only takes one argument.. how is it supposed to work???
Click to expand...
Click to collapse
You only pass the newinitramfs.img.gz that's created in the lines above, just drop the "zImage" from the commandline.
// EDIT
OK, I got as far as to compile my own kernel from the sources Samsung has released
I eventually end up with a nice and fresh, built from scratch zImage \o/
When I throw my selfmade zImage at the extractor script posted above, I get the proper (stock) initramfs filestructure I intended to put in (in other words, I managed to put my (as of now untouched) own initramfs.img into the zImage).
I create a nice .tar, flash with Odin and.... nothing
I get the bootsplash with the triangle and that's it, it doesn't get any further.
Anyone got a hint for me what I did wrong?
What I did:
(this all happened on a Linux machine)
extract Samy's kernel source
installed the codesourcery toolchain
set the CROSS_COMPILE var in ./kernel/Makefile to the proper path to the toolchain
ran
make c1_rev02_defconfig (according to readme.txt)
and then
make zImage CONFIG_INITRAMFS_SOURCE="/path/to/extracted/stock/initramfs/"
padded with 0x00s to the 8MiB size, tar'ed and Odin'ed
which brings me to the dead bootscreen....
Not even recovery works.
HellcatDroid said:
Yeah, that is actually what the repacker script does!
It has precomplied objects and compiles/links them together to the final (new) zImage.
Click to expand...
Click to collapse
I guess you've got repacker from first Galaxy?
It won't work. SFX header you're trying to compile is for first galaxy. It has hardcoded addresses and they are not compatible with Galaxy S II. Toolchain is also for SGS as well (not sure if it still suitable for SGSII).
Take kernel source code and toolchain for SGSII and it will work.
Yah, well, I got the kernel to compile fresh from sources now, no need for a repacker anymore, I just go make zImage and be happycat
Someone knows how to repack it?
Maybe Chainfire or Pulser?
Agreed, Can someone explain the process in full? modyfying and repacking zImage gets 2mb+ less in size, what we are missing?
Grooby said:
Agreed, Can someone explain the process in full? modyfying and repacking zImage gets 2mb+ less in size, what we are missing?
Click to expand...
Click to collapse
Necro much?
rawat said:
necro much?
Click to expand...
Click to collapse
zombie thread wants braaaaiiiiiiinnnnnnnnnnnnzzzzzzzzzzzzzz!!!!!!
Looks like i raised death searching for answer lool
A few tried to make repackers for the I9100 - and failed.
Even less know how to actually do it - and don't share the knownledge.
The thing is, that the initramfs is linked into the zImage during compile time, so it can't simply be "snipped out" and "new one pasted in".
That's why I eventually ended up compiling the whole thing from sources.
It would certainly nice if someone like ChainFire could share how to do it.... but he's too worried about others rebuilding his rootkernel with other nametags on it.
HellcatDroid said:
A few tried to make repackers for the I9100 - and failed.
Even less know how to actually do it - and don't share the knownledge.
The thing is, that the initramfs is linked into the zImage during compile time, so it can't simply be "snipped out" and "new one pasted in".
That's why I eventually ended up compiling the whole thing from sources.
It would certainly nice if someone like ChainFire could share how to do it.... but he's too worried about others rebuilding his rootkernel with other nametags on it.
Click to expand...
Click to collapse
GitHub.com/xiaolu
Sent from my GT-I9100 using xda premium

How to Dev for P930

Hi!
i will try to put here everything i found important for dev in this tread.
This is gonna be a work in progress...
First we can change many value in kernel with sysctl.conf in system/etc folder when you have init.d folder support.
This View attachment tunable.txt is a list of thing you can play with.
Magic number you need for View attachment mkbootimg.zip to recompile a new boot.img
This is for P930 and SU640
Code:
./mkbootimg --kernel zImage --ramdisk newramdisk.cpio.gz --cmdline "vmalloc=450M,console=ttyDCC0,115200,n8 androidboot.hardware=qcom" --base 0x40200000 --pagesize 2048 --ramdiskaddr 0x41a00000 -o newboot.img
This is for LU6200
Code:
./mkbootimg --kernel zImage --ramdisk newramdisk.cpio.gz --cmdline "vmalloc=450M, console=ttyDCC0,115200,n8 androidboot.hardware=qcom" --base 0x40200000 --pagesize 2048 --ramdiskaddr 0x41300000 -o newboot.img
many more to come with more detail for sure....
Hi,i tried to customize the boot.img without success. as a test i just unpack and repack it without any changes to the content but it didn't boot. can you give me some advice? Thanks
---------- Post added at 02:48 AM ---------- Previous post was at 02:40 AM ----------
I've been trying to build a kernel from p930's source following tutorial written for other devices. but the generic method seems not working with LG kernel build. can you tell how you've built your kernel, as i see you've already compiled a overclocked kernel for lu6200.
freefall12 said:
Hi,i tried to customize the boot.img without success. as a test i just unpack and repack it without any changes to the content but it didn't boot. can you give me some advice? Thanks
---------- Post added at 02:48 AM ---------- Previous post was at 02:40 AM ----------
I've been trying to build a kernel from p930's source following tutorial written for other devices. but the generic method seems not working with LG kernel build. can you tell how you've built your kernel, as i see you've already compiled a overclocked kernel for lu6200.
Click to expand...
Click to collapse
LU6200 use a special ramdisk address
Will post later at home
Sent from my LG-P930 using xda premium
Just add a bit more in first post
HO!NO! said:
Just add a bit more in first post
Click to expand...
Click to collapse
Hi, i tried your mkbootimg but it can't be executed as a binary.
[email protected]:~/cm-930/141$ export PATH=~/cm-930/141/:$PATH
[email protected]:~/cm-930/141$ ls -alh
total 25M
drwxrwxr-x 3 dell dell 4.0K Apr 6 09:19 .
drwx------ 12 dell dell 4.0K Apr 4 12:40 ..
-rw-r--r-- 1 dell dell 10M Apr 3 21:25 141boot.img
-rw-rw-r-- 1 dell dell 8.5M Apr 4 21:06 141ramdisk.cpio.gz
-rw-rw-r-- 1 dell dell 216 Apr 4 21:10 6200bootimg.cfg
-rw-rw-r-- 1 dell dell 2.1M Apr 4 21:10 initrd.img
-rwxrwxrwx 1 dell dell 18K Mar 20 09:20 mkbootimg
-rw-rw-r-- 1 dell dell 0 Apr 4 21:10 new141boot.img
drwxrwxr-x 10 dell dell 4.0K Apr 4 21:08 ramdisk
-rw-rw-r-- 1 dell dell 4.4M Apr 4 21:10 zImage
[email protected]:~/cm-930/141$ mkbootimg --kernel zImage --ramdisk 141ramdisk.cpio.gz --cmdline "vmalloc=450M, console=ttyDCC0,115200,n8 androidboot.hardware=qcom" --base 0x40200000 --pagesize 2048 --ramdiskaddr 0x41300000 -o newboot.img
bash: /home/dell/cm-930/141/mkbootimg: cannot execute binary file
[email protected]:~/cm-930/141$ ./mkbootimg --kernel zImage --ramdisk newramdisk.cpio.gz --cmdline "vmalloc=450M, console=ttyDCC0,115200,n8 androidboot.hardware=qcom" --base 0x40200000 --pagesize 2048 --ramdiskaddr 0x41300000 -o newboot.img
bash: ./mkbootimg: cannot execute binary file
Those commands are most likely intended to be run on a linux box.
Malnilion said:
Those commands are most likely intended to be run on a linux box.
Click to expand...
Click to collapse
sure!i tried this on ubuntu 12.04
@freefall12,
LOL, I'm a dumbass, for some reason I thought you were trying to run that from a Windows prompt. You might just need to make it an executable file:
Code:
chmod +x mkbootimg
Malnilion said:
@freefall12,
LOL, I'm a dumbass, for some reason I thought you were trying to run that from a Windows prompt. You might just need to make it an executable file:
Code:
chmod +x mkbootimg
Click to expand...
Click to collapse
yes,i did gave execution permission to it but it didn't work. other version of mkbootimg run fine except that they failed to produce bootable boot.img.that's why i want to try this one !
What about sh mkbootimg?
I try to UNPACK and REPACK, and success. Link...
http://bbs.fengbao.com/thread-914738-1-2.html
---------- Post added at 09:44 AM ---------- Previous post was at 09:30 AM ----------
How to compile CM9 source and the kernel project?
I try to git from https://github.com/CyanogenMod/lge-kernel-iproj.
but make failed.
As follows:
1、make distclean
2、export ARCH=MSM8X60
3、export TARGET_PRODUCT=msm8660-perf
4、make msm8660-perf_defconfig
5、make -j4
HONO!Two problems:
1、how to compile cm9 kernel?
2、how to get the CM9 for P930 source project ?
THANKS!!!
HONO!Thanks for your reply.
to ensure the compiler success, i tried from P930 source project
\Kernel\lge\debug\dummy.C
\kernel\lge\lge_board\i_atnt\platform_i_atnt_mmc.C
\kernel\lge\lge_board\i_atnt\platform_i_atnt_input .C
\kernel\lge\lge_board\i_atnt\platform_i_atnt_mmc.C
Copied to the corresponding directory, but i have a error.
CC drivers/gpu/MSM/kgsl_iommu
Drivers/gpu/MSM/kgsl_iommu. C: In function 'kgsl_iommu_unmap' :
Drivers/gpu/MSM/kgsl_iommu. C: 241: error: the implicit declaration of function 'iommu_unmap_range'
Drivers/gpu/MSM/kgsl_iommu. C: In function 'kgsl_iommu_map' :
Drivers/gpu/MSM/kgsl_iommu. C: 264: error: the implicit declaration of function 'iommu_map_range'
Make [3] : * * * [drivers/gpu/MSM/kgsl_iommu. O]
Compile statements as follows:
Make cyanogenmod_iprj_defconfig ARCH = arm
Make ARCH = arm CROSS_COMPILE = ~/Android/source/prebuilt/Linux-x86/ toolchain/arm-eabi-4.4.3/bin/arm-eabi-
kernel has compiled success, but compiled cm9 file system failure, may be lost vendor part of the file.
ramdisk has compile successfully, but full build got some errors.
i guess maybe lacking some vendor files.
HO!NO!, can you reply with instructions on how to make a ROM? I've been trying for years but can never get complete instructions. The closest i've gotten is getting the development environment setup on my linux install and downloading all of the Cyanogenmod files, but i couldnt find those files, and i didnt know what was what, and couldnt find that information anywhere! I really want to start from stock and completely make my own with custom graphics and all because im good at photoshop, but i just cant find the information!
PMad said:
HO!NO!, can you reply with instructions on how to make a ROM? I've been trying for years but can never get complete instructions. The closest i've gotten is getting the development environment setup on my linux install and downloading all of the Cyanogenmod files, but i couldnt find those files, and i didnt know what was what, and couldnt find that information anywhere! I really want to start from stock and completely make my own with custom graphics and all because im good at photoshop, but i just cant find the information!
Click to expand...
Click to collapse
So you want to compile your how cm9?
I need more info on where you are now and what is not working.
I will not do a complete guide on this since so many are all ready there Google it.
Sent from my LG-P930 using xda premium
HO!NO!,
Do you know any method to decompile .kdz files?
I tried to do this with the method and decompile tools for LG P540, but it didn't work.
Machzelet said:
HO!NO!,
Do you know any method to decompile .kdz files?
I tried to do this with the method and decompile tools for LG P540, but it didn't work.
Click to expand...
Click to collapse
Right now there is no tool to unpack kdz for p930,p935,p936,su640,lu6200.
All end at .tot file
Sent from my LG-P930 using xda premium
Just to clarify, you can unpack the KDZ file by using LGExtract tool here: http://forum.xda-developers.com/showthread.php?t=1566532 . This will leave you with a few miscellaneous files, with the main one being the WDB file. You can extract that with the LGExtract tool as well. However, that just leaves you with a TOT file which, as HO!NO! explained, there doesn't seem to be a method to extract yet.

Categories

Resources