Per qualsiasi sistema operativo, vorresti un cross-compilatore, io uso gcc4. Da lì, probabilmente sarà la scelta migliore per usare C o se ti senti un po 'frisky Pascal o C ++. Dovresti anche conoscere alcuni assembly per inline asm e scrivere il bootloader (se decidi di eseguire il rollover). Il Wiki OSDev è fantastico per una guida per principianti allo sviluppo del sistema operativo.
Per un sistema operativo su un dispositivo mobile, credo che sarà leggermente più difficile e un po 'diverso. L'assemblaggio sarà leggermente diverso su un processore ARM rispetto a uno Intel o AMD, il modo in cui il sistema passa attraverso il suo POST e il Bios interno (se ne ha uno) sarà anche diverso. Sono sicuro che ci sono persone là fuori che hanno capito come modificare le proprietà di avvio sull'iPod ma non sono riuscito a trovare nulla con una scansione veloce.
Per quanto riguarda la grafica e tutto il resto, sarebbe come creare grafica su un desktop, una volta che ti occuperai di tutte le altre cose di livello inferiore (perché dovrai scrivere cose come printf, malloc, realloc, dealloc e tutto il resto che date per scontato solo per farlo andare e venire.