Roadmap

From IPhone Linux

Jump to: navigation, search

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?)

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.

Personal tools
Toolbox
thanks to the guys at
  ModMyiFone.com and
  NegriElectronics for the
  test iPod Touch!