IOS/fr
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 :
- open
- close
- read
- write
- seek
- ioctl
- 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 :
- /dev/aes
- /dev/boot2
- /dev/di
- /dev/es
- /dev/hmac
- /dev/flash
- /dev/fs
- /dev/listen
- /dev/net/ip/bottom
- /dev/net/ip/top - opérations sur Socket TCP/IP
- /dev/net/kd/request
- /dev/net/kd/time
- /dev/net/ncd/manage
- /dev/net/ssl
- /dev/net/usbeth/top
- /dev/net/wd/command
- /dev/net/wd/top
- /dev/printserver
- /dev/sdio
- /dev/sdio/slot0
- /dev/sdio/slot1
- /dev/sdio/slotw
- /dev/sha
- /dev/stm/eventhook
- /dev/stm/immediate
- /dev/usb
- /dev/usb/ehc
- /dev/usb/kbd
- /dev/usb/oh0
- /dev/usb/oh1
- /dev/wl0