Roadmap
From iPhone Linux
Contents |
Stage 1: OpenIBoot
Stage 1.1a (Low-Level Hardware)
- Bootstrapping (Done)
- Processor setup (Done)
- MMU (Done)
- Clock (Done)
- Timer (Done)
- Serial support: Needed for basic debugging (Done)
- USB Support: This is necessary to allow everyone to have I/O with OpeniBoot, reducing the barriers to entry for potential developers.
- Use interrupts for serial I/O rather than polling: This is necessary for us to really have a UI for OpeniBoot, including GDB
- Verify that timer interrupts are working: They are written, but they need to be tested.
Stage 1.1b (Debugging Environment)
- GDB stub: Would be very helpful for all future development
- Task switching: OpenIBoot should have task switching niceties such as yield, sleep, etc. This will allow for a better environment to develop in.
- IMG3 packager: We need to be able to support the next generation of iPhone software
- Figure out how to get img* to work without including Apple's own certificate chain (since that's copyrighted): This might be very easy or tough depending on what the pwnage patches currently do.
Stage 1.1 Development Milestone
Command line: OpenIBoot should become a development platform, able to load pieces of code, switch into GDB to execute them, and switch back out.
Stage 1.2 (Critical Drivers)
- DMA driver: Necessary for a whole lot of future devices. This should be done concurrently with devices that need it.
- GPIO driver: See above.
- SPI driver: See above.
- I2C driver: See above.
- Display driver: Useful for morale... We could do a lot of neat stuff for this. Also, it would allow for easier debugging to have another I/O option.
- NAND driver: Nicer than loading everything from USB or serial all the time. This will also allow us to do some neat things with user data.
- NOR driver: See above.
- NVRAM driver: It would be nice to use NVRAM for our own configuration stuff. Also it is critical for wi-fi later on.
- Button driver: An interface that end-users can use and we can implement easily (Done)
- OS X chainloading: (Done)
Stage 1.2 Development Milestone
- iPhone Drive: Using the USB OTG chip capabilities, the USB mass storage protocol will be implemented and hooked directly into the NAND driver. This will allow computers to see the iPhone as a simple flash drive (when booted into this mode). Using the button and display drivers, a boot menu can be implemented to allow users to toggle between the two modes upon reboot.
Stage 2: Linux
Stage 2.1a (Booting Linux)
- Linux bootloader: Shouldn't be too hard.
- Port clock, timer, mmu and serial stuff to the Linux kernel: This will get us a working Linux kernel, but not a very impressive one.
- kgdb stub: Use a combination of our earlier written GDB stub and kgdb patches so we can do source level debugging of the kernel
Stage 2.1b (Port drivers)
- Port all the drivers we have to Linux
Stage 2.1c
- Fix up the kernel until it works.
Stage 2.1 Development Milestone
A working Linux kernel with everything we have got in openiboot.
Stage 2.2 (Make it useable)
- Wi-fi driver: Need something like it for the average Joe to get any use out of it.
- Get a user mode environment working with a shell and SSH.
Stage 2.2 Development Milestone
Announce Linux on the iPhone! We will have everything people expect to see. A text-only console on the screen and a way to communicate/do stuff/launch apps with it.
Stage 3: Long-Term Plans
Stage 3.1 (Remaining Drivers)
- I2S, sound driver: Or else we can't play music
- Multitouch driver: Need a better UI
- Accelerometer driver: Shouldn't be too hard.
- Baseband driver: We need to make phone calls.
Stage 3.2 (GUI)
- Get X working on iPhone Linux
- Write or port some Window Manager that will work well with it. (Ubuntu Mobile, Andriod....)
Stage 3.2 Development Milestone
We should be at a point where we can call upon the Linux development community at large to develop apps for iPhone Linux. This will include stuff like keyboard entry, a phone app, etc. We will probably reshape the project into something designed to make a nice, coherent system for the end-user. We could decide to make one specially for the iPhone, or we could co-opt Android, OpenMoko, Ubuntu Mobile or projects of that nature. Eventually, iPhone Linux should not just be a toy for developers, but a viable competitor to the existing iPhone OS.
