IOS: Difference between revisions
finished sorting device entries |
No edit summary |
||
| Line 100: | Line 100: | ||
* /dev/net/ip/top - TCP/IP [[Socket]] operations | * /dev/net/ip/top - TCP/IP [[Socket]] operations | ||
* /dev/net/ip/bottom | * /dev/net/ip/bottom | ||
* Opens /dev/net/wd/top | |||
* Opens /dev/net/usbeth/top | |||
=== SSL === | === SSL === | ||
Revision as of 05:03, 29 July 2008
IOS is the operating system that runs on the Starlet coprocessor inside the Hollywood package. It provides the services that are used by Wii code to access most of the system devices.
See also: IOS/QA
IPC
Communication with IOS from PPC code is done using an IPC mechanism. There are 7 calls that can be made using this system:
- open
- close
- read
- write
- seek
- ioctl
- ioctlv
ipc struct size = 0x40, aligned to 0x20
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
3F: 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 is a handle you get back from ios on "open", and that you should pass back to all other calls --segher
Most non-trivial operations are performed by opening one of the below resources, then calling ioctl or ioctlv on it.
The Starlet kernel hands these calls over to the individual drivers / processes within the Starlet. The processes register themselves to handle requests by creating one or more queues and assigning them to handle requests from a particular /dev device.
IOS Modules
IOS is a Nintendo-proprietary, embedded operating system. It uses a microkernel architecture, with several independent modules that talk to each other via "resources", which are organized as entries in the /dev tree.
Kernel
The Kernel is the piece of code that is actually booted; it contains a small ELF-loader header at the beginning, and then is an ELF file. In addition to the core microkernel stuff, it contains the bare minimum drivers necessary to read the rest of the drivers from the NAND filesystem -- specifically, FFS (Flash Filesystem), ES (E-Ticket Services), and IOSP (Responsible for booting and managing Broadway?).
FFS
- /dev/boot2
- /dev/flash
- /dev/fs
ES
- /dev/aes
- /dev/es
- /dev/hmac
- /dev/sha
DIP
ETH
KBD
KD
- /dev/net/kd/request
- /dev/net/kd/time
NCD
- /dev/net/ncd/manage
- /dev/net/wd/top (Yes, this is actually created by NCD, not WD)
OH0/1
- /dev/usb/ehc
- /dev/usb
- /dev/usb/oh0
- /dev/usb/oh1
SDI
SO
- /dev/net/ip/top - TCP/IP Socket operations
- /dev/net/ip/bottom
- Opens /dev/net/wd/top
- Opens /dev/net/usbeth/top
SSL
- /dev/net/ssl
STM
- /dev/stm/eventhook
- /dev/stm/immediate
WD
- /dev/net/wd/command
- /dev/listen ("Indication RM")
- Opens /dev/wl0
- Opens /dev/stm/immediate
WL
- /dev/wl0
- Opens /dev/listen