The way that I did it is terrible though. I took the iphone 3g config and
modified everything from there without actually making a new config for the 2g
touch. In other words, compile this code for the iphone 3g and it actually runs
on the 2g touch. Ugh that is so nasty. Anyways, this boots on the 2g touch and
gets a bunch of stuff up and running. I'm not 100% sure what all works, but it
makes it though all of the basic initialization. There aren't really drivers for
anything after that though... I hacked printk to output to the framebuffer that
iBoot sets up, so you do get output on the screen as the kernel is booting.
INSTRUCTIONS FOR USE:
This really shouldn't be in a git commit message, but I'm too lazy to put it
elsewhere.
If anybody wants to actually do something with this code, you should do
everything properly and make a proper config for the 2g touch that doesn't just
modify the iphone 3g one. For new drivers for the 2g touch, you should start by
looking at openiBoot (everything up to but not including NAND is working there
for the 2g touch) and at the a4 kernel on the iDroid-Project page. It should be
pretty easy to get the kernel up to the level that openiBoot is at.
I've added a .config to this git commit that will build linux for the 2g touch.
Just run make in the main folder, and it will spew out the kernel at
arch/arm/boot/zImage. I've just been using the initrd from the main idroid
project distribution (android.img.gz or whatever) so grab that too.
To use this kernel, use the openiBoot in my (kleemajo's) github repository. It
has a couple patches specific to the 2g touch that are needed due to the
device's memory setup (initrd gets placed in the wrong spot on the 2g touch
using the stock iDroid-Project openiBoot).
From the openiBoot console, send the kernel and initrd over and then boot linux.
This is done with the commands:
!/path/to/zImage
kernel
!/path/to/android.img.gz
initrd
boot
If everything goes well, you will see the output of linux booting on your LCD!
I don't have time to do much more with this kernel: my objective was always just
to get some form of linux on the 2g touch. If someone wants to port all of the
drivers and get a full android working then please go ahead. Unfortunately,
there isn't much developer interest for this specific device so you will most
likely be on your own. If a serious developer is interested in getting a full
android port, I can help you out and share more of my knowledge. I unfortunately
don't have the time to train people who have never done this before though so
please only contact me if you are very familiar with C and ARM assembler and
have a good knowledge of how the iPhone and iPod Touch work already. I've put up
a guide at http://www.idroidproject.org/wiki/User:Kleemajo that will get you up
to speed. If you have read though that whole guide and understand everything in
it, then feel free to contact me at kleemajo@gmail.com for help.
The big step that is still missing before android is possible is NAND support.
To put it nicely, NAND is a bitch and is going to take a lot of effort and time
to reverse engineer. The iphone 4 guys (Bluerise, ricky26 et. al) are doing a
great job with the FTL reversing, and a lot if not all of that code can be used
directly on the 2g touch. The main issue is that the low level flash drivers are
different... the 2g touch uses something called "h2fmss" which is completely
different from what is done on the 8900 (iPhone 2G/3G) series of devices and
also completely different from the "h2fmi" used on the a4 (iPhone 4G) series. It
is a huge chunk of code and seems to get bigger and bigger the more that you
look at it...
To anyone who has read though this, good luck!