From http://wii.cngba.com/wii_pj/20100830113641.shtml
这篇依然先不讨论软改的部份,先讲基本架构。
Wii事实上有两个CPU,一颗ARM处理器叫做Starlet。而另一颗PowerPC处理器叫做Broadway。
Starlet负责控制系 统资源,包括bootloader,IOS(后述),都在这颗CPU上执行。而PPC处理器,负责执行包括系 统选单、游戏、频道等等的应用主程式。
1. Wii开机流程
在开进Wii系 统选单前,事实上Wii会先执行所谓的bootloader,bootloader就是在载入主要的作业系 统前,一些比较简单的小程式,而Wii的bootloader又分为boot0/boot1/boot2。
boot0 ------> boot1 ------> boot2 ------> SYSMENU IOS -> SYSMENU(系 统选单)
为什么要分这么多层牵涉到系 统设计上的一些问题,这边先讲结果。
boot0最小,放在只读记忆体中,不可变更。最主要的用途是检查(Hash check)和载入boot1。
由于boot0无法更变,boot1的Hash也无法更改,(网路上又有人把它称为OTP, One-time password) ,所以boot1同样是无法被变更的(在Wii的开发机上,据说不存在这个OTP,所以boot1是可以被修改的) 。
boot1用来检查和载入boot2,检查boot2的机制如同前文,用的是RSA签章检查,并不像boot1的检查一样被写死,所以boot2是可以被升级或变更的。
boot2用来载入系统IOS,系统IOS载入系 统菜单。
2. IOS
IOS一般人又把它叫做Input Output System,负责管理Wii的系统资源,而它事实上就是跑在ARM上面的一个内核(kernel),或作业系统(OS) 。
和一般传统系统只会有一个OS不同,Wii基本上每个应用程式都可以指令自己要使用的IOS。好处是,我如果想要增加新功能的时候,可以不必考虑旧游戏的相容性。我只要做一个新的IOS就好,而旧的游戏可以用旧的IOS,不必担心不能玩。(就有点像我 的电脑上面同时装了XP和Win7,如果我要执行XP专用的程式,就开进XP,要执行Win7专用的程式,就开进Win7)
同一个时间,只会有一个IOS,而不会有复数的IOS在执行。
Wii里面,一共可以有256个不同的Wii IOS,IOS的号码,有人说可以视为存在主机中的位置(slot) ,我个人是把它单纯当做一个编号。编号不见得越大就越新,不过总之编号不同就是不一样的用途。有新的周边、像balance board, webcam, 麦克风等等,通常又会出新的IOS。
每个IOS本身,又有2 bytes的版本号码,所以又有所谓0~65535的版号,理论上,同样编号,不同版号的IOS应该还是要相容,越新的版号理论上只会做bug修正,(后面会提到例外,有些新版主机不可以用旧版的IOS) 。
Wii的应用程式(频道或光碟)叫做title,而每个title都有所谓的Title Metadata(TMD)来描述title的性质,TMD中,会指定这个应用程式所需要的IOS。
在执行一个应用程式的时候,首先会检查这个应用程式需要的IOS,例如购物频道v19,TMD中就会说明需要IOS61。所以会先载入IOS61,初始化整个wii系 统之后,IOS61会帮你载入购物频道这个应用程式。
3. SYSMENU
和一般直觉想法不同的是,系统菜单中的版本编号,其实不代表整个系 统的版本。
事实上,系统菜单,和游戏或频道等等没有什么太大的不同,系统选单,也只是一个功能比较复杂的应用程式而已。(以系统选单4.2J为例,开机时,boot2载入IOS70,然后IOS70初始化Wii后,载入系 统选单4.2J)
就算像游戏的一些共通功能,例如按home设定wiimote,或回主选单,或reset,也都是游戏本身提供的,而不是系统选单提供的。
所以,和一般人想法不同的是,基本上频道或游戏正不正常,和系统选单本身,其实是没有关系的。
而状况会比较像前面的图解一样,执行了别的程式之后,系统选单和系统选单用的IOS,就停止执行了,取而代之的是新的IOS和新的应用程式。
当然,因为任天堂更新选单的时候,当然也会顺便更新IOS和频道,所以版号还是可以做一点参考,但是有时候同一个版号存在数次不同的更新,就又有所谓v1/v2/v3等等的不同。
总之,选单的更新基本上只和选单本身有关而已,例如说系统选单支援SDHC拷贝存档,和Photo Channel支援SDHC放照片,是两回事。要支援SDHC,两者需要更新各自的IOS和主程式。
4. Stub IOS
Stub IOS就是没有任何功能的IOS,除了最早的SYSMENU 1.0使用IOS9,也有供游戏使用外。后来的SYSMENU都是使用自己专用,而不给游戏使用的IOS。一旦SYSMENU更新,升级上去之后,假设换用新的IOS,旧的IOS就没用了。
所以任天堂就把旧的IOS拿没作用的版本取代,节省记忆空间,这也是为什 么有人降级SYSMENU之后变砖的原因。(因为boot2想要载入无效的IOS,而开不了机)
以下列出各版本选单所使用的IOS
SYSMENU 1.0 IOS9
SYSMENU 2.0 IOS11 有效IOS: v4 stub: v256
SYSMENU 2.2 IOS20 有效IOS: v12 stub: v256
SYSMENU 3.0~3.3 IOS30 有效IOS: v1037, v1039, v1040, v2576 stub: v2816
SYSMENU 3.4 IOS50 有效IOS: v4889 stub: v5120
SYSMENU 4.0/4.1 IOS60 有效IOS: v6174 stub: v6400
SYSMENU 4.2 IOS70 有效IOS: v6887 stub: v6912
SYSMENU 4.3 IOS80 有效IOS: v6943
之后又有阻挡cIOS的所谓stub。
这在之后再做讨论。