|
這篇依然先不討論軟改的部份,先講基本架構。
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會幫你載入購物頻道這個應用程式。
軟件1 軟件2
------------- ----------> --------------
軟件一用的IOS 執行 軟件2用的IOS
3. SYSMENU
和一般直覺想法不同的是,系統菜單中的版本編號,其實不代表整個系 統的版本。
事實上,系統菜單,和遊戲或頻道等等沒有什麼太大的不同,系統選單,也只是一個功能比較複雜的應用程式而已。(以系統選單4.2J為例,開機時,boot2載入IOS70,然後IOS70初始化Wii後,載入系 統選單4.2J)
就算像遊戲的一些共通功能,例如按home設定wiimote,或回主選單,或reset,也都是遊戲本身提供的,而不是系統選單提供的。
所以,和一般人想法不同的是,基本上頻道或遊戲正不正常,和系統選單本身,其實是沒有關係的。
而狀況會比較像前面的圖解一樣,執行了別的程式之後,系統選單和系統選單用的IOS,就停止執行了,取而代之的是新的IOS和新的應用程式,如下圖:
SYSMENU 4.2 官方頻道(如Shopping Channel)
------------- ----------> -------------------------------
IOS70 系 統菜單 頻道需要的IOS(如shop用的IOS61)
執行遊戲又回到選單的流程
SYSMENU 4.2 遊戲 SYSMENU 4.2
------------- ----------> -------------- ---------> -------------
IOS70 光盤頻道 遊戲需要的IOS 回選單 IOS70
當然,因為任天堂更新選單的時候,當然也會順便更新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。
這在之後再做討論。 |
|