Open main menu

WiiBrew β

IOS est le système d'exploitation qui tourne sur le coprocesseur Starlet à l'intérieur du processeur principal Hollywood. Il fournit les services employés par le système de la Wii pour accéder à la plupart des dispositifs du système.

Voir également : IOS/QA (en anglais).

IPC

La communication avec l'IOS depuis du code PPC est possible avec un mécanisme IPC (Instruction Per Cycle) qui est la fréquence des actions exécutées par cycle . Il existe 7 actions :

  1. open
  2. close
  3. read
  4. write
  5. seek
  6. ioctl
  7. ioctlv

Voici un exemple d'implémentation, sans garantie de fonctionnement : ipc.c

ipc struct size = 40, aligned to 20

00:     cmd     // 1=open 2=close 3=read 4=write 5=seek 6=ioctl 7=ioctlv
04:     ret
08:     fd
0c:     arg[5]
20:     async1
24:     async2
28:     0
40:     relaunch, used for ioctlvreboot

open:   fd = 0
        arg0, arg1: name, mode (1=read 2=write)

close:  fd

read:   fd
        arg0, arg1: addr, len

write:  fd
        arg0, arg1: addr, len

seek:   fd
        arg0, arg1: where, whence

ioctl:  fd
        arg0: ioctl #
        arg1, arg2: addr, len
        arg3, arg4: addr, len

ioctlv: fd
        arg0: ioctl #
        arg1: # in
        arg2: # out (or in-out)
        arg3: pointer to # in plus # out pairs of (addr, len)

fd est un handle que vous récupérez d'ios avec "open" et que vous devriez passer en retour à tous les autres appels --segher

La plupart des opérations non triviales sont effectuées par l'ouverture d'une des ressources ci-dessous, puis par un appel à ioctl ou ioctlv sur celles-ci.

Le noyau du Starlet distribue ces appels aux drivers et processus individuels au sein du Starlet. Les processus s'enregistrent eux-même pour prendre en compte des requêtes en créant une ou plusieurs files et en leur assignant la prise en compte de requêtes provenant d'un périphérique /dev particulier.

Pour tester ces périphériques IOS, vous pouvez utiliser l'application EasyIOS pour Wii.

/dev tree

Ressources connues de l'arborescence /dev :