作者priv (邪恶松鼠)
看板Modchip
标题[Wii ] Wii软改概念解析(二) Boot2/IOS/SYSMENU
时间Mon Jul 12 16:03:35 2010
这篇依然先不讨论软改的部份,先讲基本架构
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用来载入系统选单
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),也就是安装的位置
(不过,slot1是boot2, slot2是system menu,剩下的才是IOS)
编号不见得越大就越新,不过总之编号不同就是不一样的用途
有新的周边、像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会帮你载入购物频道这个应用程式
软体一 软体二
------------- ----------> --------------
软体一用的IOS 执行 软体二用的IOS
3. SYSMENU
和一般直觉想法不同的是,系统选单中的版本编号
其实不代表整个系统的版本
事实上,系统选单,和游戏或频道等等没有什麽太大的不同
系统选单,也只是一个功能比较复杂的应用程式而已
(以系统选单4.2J为例,开机时,boot2载入IOS70
然後IOS70初始化Wii後,载入系统选单4.2J)
就算像游戏的一些共通功能
例如按home设定wiimote,或回主选单,或reset
也都是游戏本身提供的,而不是系统选单提供的
所以,和一般人想法不同的是,基本上频道或游戏正不正常
和系统选单本身,其实是没有关系的
而状况会比较像前面的图解一样
执行了别的程式之後,系统选单
和系统选单用的IOS,就停止执行了
取而代之的是新的IOS和新的应用程式,如下图
SYSMENU 4.2 官方频道(如Shopping Channel)
------------- ----------> -------------------------------
IOS70 选单 频道需要的IOS(如购物用的IOS61)
执行游戏又回到选单的流程
SYSMENU 4.2 游戏 SYSMENU 4.2
------------- ----------> -------------- ---------> -------------
IOS70 光碟频道 游戏需要的IOS 回选单 IOS70
当然,因为任天堂更新选单的时候,当然也会顺便更新IOS和频道
所以版号还是可以做一点参考,但是有时候同一个版号存在数次不同的更新
就又有所谓v1/v2/v3等等的不同
总之,选单的更新基本上只和选单本身有关而已
例如说系统选单支援SDHC拷贝存档,和Photo Channel支援SDHC放照片,是两回事
要支援SDHC,两者需要更新各自的IOS和主程式
3. 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 IOS
这在之後再做讨论
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.113.23.102
※ 编辑: priv 来自: 140.113.23.102 (07/12 16:04)
1F:推 real1027:长知识阿! 07/12 16:22
2F:推 RXCPU:推一下 不过内容有深有浅 07/12 17:14
3F:→ priv:如果有部份太深解释不清可以讲一下,我是希望能深入浅出 07/12 17:19
4F:推 muscidae:感动! 07/12 17:41
5F:→ kyo0721:系统使用的IOS最好加上版本,很多系统IOS都有stub版,不幸 07/12 18:10
6F:→ kyo0721:用了就是无解的砖了 07/12 18:11
已补上版本,谢谢
7F:→ danny8376:其实能当ios的只有256-2=254个 ios1是boot2 07/12 18:48
8F:→ danny8376:IOS2是SYSMENU 不过官方好像也没在用ios0 07/12 18:49
9F:推 JohnGod21:膜拜 07/12 21:08
※ 编辑: priv 来自: 140.113.23.102 (07/12 23:14)
10F:推 RXCPU:值得再推一下的好文 07/13 01:22
11F:→ kyo0721:IOS0是骇客在用的 07/13 09:01
12F:推 muscidae:看完这篇後,更能了解k大强调的:游戏能不能玩和IOS有关 07/13 14:45
13F:→ muscidae:跟system menu没有关系的道理了 07/13 14:45
14F:推 X200:再推一次 看完後 感觉跟Wii的关系又更进一步了 07/13 20:58
15F:推 icemango:iOS 听起来比较像 module 不太像 OS ? 07/13 23:12
16F:推 henry74918:讲解清楚 好文! 07/14 15:02
17F:→ danny8376:把IOS当成像DOS的os吧 不过其实IOS和其他游戏机的BIOS 07/14 21:38
18F:→ danny8376:类似 换句话说 Wii就像有多个BIOS 07/14 21:39
19F:→ watasiku:有看有推 07/15 08:34
※ 编辑: priv 来自: 140.113.23.102 (07/16 13:35)
20F:推 Smile:获益良多 07/18 23:10
22F:推 HuangJS:push 09/11 23:01