在一般 PC 硬件上引導開機運行 AppleTV OS — 技術討論
AppleTV 的硬件本質上就是一部採用 EFI 的低階 Mac,而其系統底層則是換上華麗介面的 Mac OS X Tiger (10.4.7)。既然 PC_EFI 能夠引導 Tiger,我們能否直接在一般 PC 硬件上完整開機運行 AppleTV OS?
- 主筆作者
-
@NebKiwi
發表於 2009-05-01
- 所屬專區
- OSx86 10.X 核心架構與安裝配置
- 典藏規模與紀錄
- 229,460 次歷史閱讀 · 45 則精選技術筆記(萃取自 48 則原始回帖) · 2009-05-01 – 2009-08-06
- 參與貢獻成員 (8)
- @andyvand (15)@NebKiwi (12)@alexkidd (6)@naquaada (5)@pαuℓzurrr. (4)@cmdshft (3)@milanca (2)@BlackCH
- 相關硬件參考
- USB 3.2 Boot Flash Drives ↗ SATA III & NVMe SSDs ↗ AMD Radeon GPUs (QE/CI) ↗
事情是這樣的……AppleTV 的硬件本質上就是一部低階版 Mac,同樣採用 EFI 架構;而 AppleTV 的系統軟件基本上就是套上華麗 GUI 介面的 Mac OS X Tiger(印象中是 10.4.7)。我知道我們可以在現有的 Tiger 系統上替換 Finder 或安裝「Backrow.app」,但究竟是什麼因素阻礙我們直接在一般 PC 硬件上引導完整的 AppleTV OS 呢?PC_EFI 不是早就具備引導 Tiger 的能力了嗎?我手頭上已經有一份 AppleTV OS 的映像檔(直接從 Apple 伺服器抓取的更新 DMG 檔),非常樂意進行各種測試實驗……歡迎各位提供想法與建議!
社群實測與技術補充筆記
自 48 則原始討論回帖中萃取 45 則高價值技術回應
我以前在自己的 Tiger 系統上裝過它,我可以找找看手頭上是否還留著當時的安裝程式。不過放到今天其實已經沒這個必要了,因為 FrontRow 2.x 的介面看起來就跟 AppleTV 一模一樣。我個人反而比較喜歡 FrontRow 1.x 的外觀,那個巨大的旋轉圖示看起來酷多了。
我覺得如果能直接開機引導進入真正的完整版 AppleTV 作業系統,那還是相當酷的一件事。
不過我也覺得 FrontRow 2 應用程式相當平淡乏味。雖然 UI 介面還不錯,但我更希望能有一個更直覺的選單,以及像真正的 AppleTV 開機時那樣的啟動畫面(Splash Screen),而不是單純的淡出淡入效果。只可惜 Tiger 時代的那個改裝安裝包無法在 Leopard 上運作,這點實在很討厭。
如果 Chameleon 2.1 能直接將它作為一個獨立的作業系統提供支援,那就太棒了!
@NebKiwi事情是這樣的……AppleTV 的硬件本質上就是一部低階版 Mac,同樣採用 EFI 架構;而 AppleTV 的系統軟件基本上就是套上華麗 GUI 介面的 Mac OS X Tiger(印象中是 10.4.7)。我知道我們可以在現有的 Tiger 系統上替換 Finder 或安裝「Backrow.app」,但究竟是什麼因素阻礙我們直接在一般 PC 硬件上引導完整的 AppleTV…
這是可行的,但你需要一份完整的系統映像檔以及一個自訂的預先連結核心(prelinked kernel)……
ATV Take 2 同樣可行(請注意它底層其實是一個嵌入式的 xnu 10.5.6 核心……)
此外還需要額外的 Kext 來提供硬件支援……
同時還必須修改 BackRow(在裏面寫入磁碟 GUID……)並移除 watchdog kext(否則系統開機後過沒多久就會自動重啟……)
最後一步則是修改 Finder.app(即 BackRow.app),對其二進制執行檔進行修補,讓它將目前電腦識別為合法的 AppleTV 硬體(將某個檢查點的相等跳轉指令 branch if equal 替換為不相等跳轉 branch if not equal……)
如果是 AMD 平台,還需要額外修補 CPUID……
注意:AppleTV OS 裏的 Finder.app 無法直接使用鍵盤操作,因為它強制要求配搭 USB IrDA 紅外線收發器與 Apple Remote 遙控器……
不過這個問題也有變通的解決方案(workaround)……
目前有一套遙控器模擬 Kext 加背景常駐程式(daemon),可以讓你將遙控器上的 6 個按鍵對應到鍵盤按鍵上……
至於核心(Kernel)的部分,我可以利用我自己的核心原始碼編譯一個專用版本,這樣它就能在 AMD 與 Intel 處理器上完美運作,並配搭自訂的動態連結器(與標準 Voodoo 風格的 dyld 編譯方式不同,需要使用不同的設定檔進行編譯……)
@andyvand這是可行的,但你需要一份完整的系統映像檔以及一個自訂的預先連結核心(prelinked kernel)……ATV Take 2 同樣可行(請注意它底層其實是一個嵌入式的 xnu 10.5.6 核心……)。此外還需要額外的 Kext 來提供硬件支援……同時還必須修改 BackRow(在裏面寫入磁碟 GUID……)並移除 watchdog kext(否則系統開機後過沒多久就會自動重啟……
哇,分析得太深入了,多謝 Andy……看來這確實是個不小的挑戰呢,完全沒想到 AppleTV OS 竟然設下了這麼多保護機制……
@NebKiwi哇,分析得太深入了,多謝 Andy……看來這確實是個不小的挑戰呢,完全沒想到 AppleTV OS 竟然設下了這麼多保護機制……
我剛才忘了補充一點……
BackRow.framework 的二進制執行檔除了需要修改磁碟 GUID 之外,還必須將裏面的 /dev/diskXsY 替換為你實際安裝分割區與磁碟機對應的 /dev/diskXsY 路徑……
我認識一位曾經在真正的 iMac4,1 上這樣做過的朋友,而且確實成功運作了……
在黑蘋果(Hackintosh)上也完全可以照辦……這點毫無問題……
不過我注意到,儘管 ATV Take 2 採用了 Leopard 的核心,但在上面運行的應用程式與 Kext 卻大多依然是針對 Tiger 編譯的……
因此你會需要準備 Tiger 版本的 Kext(最好是 10.4.11 的版本……)
紅外線遙控器模擬器(IR Remote EMU)我可以提供(我手頭上有一個改進版……)
不過它需要針對 Tiger SDK 重新編譯……(我可能會考慮建立一個專門針對 ATV Take 2 OS 最佳化的自訂 SDK 設定……)
另外,修補 Finder 二進制執行檔的步驟,也有可能只有在標準 Mac OS X 系統下運行它時才需要……
我印象中它會去檢查 SystemVersion.plist 中的作業系統名稱是否設為 AppleTV OS(實際名稱可能略有不同……你可以檢查一下你 DMG 映像檔內的 /System/Library/CoreServices/SystemVersion.plist)
但就算真的需要修補……ht 編輯器也是你瀏覽參照位址與反組譯程式碼的最佳良伴……
用這種方式來修補二進制檔其實相當輕鬆……
我目前是透過相容於 eHome 的紅外線接收器(例如 Windows Media Center 遙控器的接收器)配搭 Mira 軟件來使用 Apple Remote 遙控器。不過那屬於另一種運作機制。我知道 Andy 提到的那個紅外線接收器模擬器(IR Receiver Emulator),當年要在 Tiger 系統上安裝 FrontRow 時就必須用到它。當時還有一些補丁可以為 BackRow 加上「結束」(Quit)選項,以便退回啟動修改版的 Finder。但我不確定這樣大費周章是否值得,因為如果想達到相同的效果,其實只要用準系統(Barebone)硬件組裝一台黑蘋果,再把 FrontRow 加入登入項目(Login Items)清單中自動啟動就行了,而且那樣還能直接配搭 Mira 使用 Apple Remote。
喔對了,我也記得當年那些 /dev/diskXsY 的修改步驟。那必須使用十六進制編輯器(Hex Editor)來修改,對吧?而且我印象中 AppleTV 軟件還會在指定磁碟的根目錄下建立一大堆資料夾(好像是從 00 編號到 99 之類的?),看起來相當雜亂。
@naquaada我目前是透過相容於 eHome 的紅外線接收器(例如 Windows Media Center 遙控器的接收器)配搭 Mira 軟件來使用 Apple Remote 遙控器。不過那屬於另一種運作機制。我知道 Andy 提到的那個紅外線接收器模擬器(IR Receiver Emulator),當年要在 Tiger 系統上安裝 FrontRow 時就必須用到它。當時還有一些補丁可以為 BackRow 加上「結束」(Quit)選項…
我認為 Mira 在這裏行不通,因為它的機制是將遙控器功能直接映射成系統操作指令,而不是模擬底層的 Apple Remote 紅外線訊號轉換……
因此另一個方案是修改 Finder.app,同時將裏面的 BRFullScreenRenderer 替換為 BRWindowRenderer(這樣就能使用鍵盤上的 Apple 鍵 + Tab 切換回底層作業系統)。
即便如此,你依然需要讓 Remote Emu 背景常駐程式保持運行,才能操作介面……
我以前曾經寫過 6 個小應用程式(每個對應遙控器上的一個按鍵),並透過一款可以為特定應用程式指定滑鼠按鍵功能的工具,將它們映射到 AppleTV.app 上(把每個所需的滑鼠按鍵對應到正確的遙控器按鍵……不過這需要一隻具備 6 個按鍵的滑鼠……)。
那幾個小程式的原理非常簡單……它們只是向對應的 kern. 等系統介面發送正確的 sysctl 操作指令而已。
這樣一來,當 AppleTV.app 運行時,用家就可以直接用滑鼠來操作它……(而且不會干擾系統的正常操作,因此也就不需要在背景運行那個鍵盤映射常駐程式了……)
我當年在運行 Tiger 10.4.11 的 AMD PC 上實測過這個方案,運作非常成功。
@NebKiwiPC_EFI 不是早就具備引導 Tiger 的能力了嗎?
任何支援 EFI 的開機引導程式都能勝任……
Chameleon V2 更是能夠完美運作,完全不會有任何問題……
如果你打算為 PC 製作一套自訂的 AppleTV Take 2 系統,我很樂意為嵌入式 AppleTV 架構重新編譯核心組件……
不過我手頭上已經沒有 Mac OS X 10.4.11 安裝 DVD 了,因此很難將所需的驅動程式預先連結進核心裏(用來產生 mach_kernel.prelink)。
但我想或許可以利用 10.4.11 的 Combo 整合更新包來提取其中一部分……
有需要請隨時告訴我……
專案計劃
@andyvand如果你打算為 PC 製作一套自訂的 AppleTV Take 2 系統,我很樂意為嵌入式 AppleTV 架構重新編譯核心組件……不過我手頭上已經沒有 Mac OS X 10.4.11 安裝 DVD 了,因此很難將所需的驅動程式預先連結進核心裏(用來產生 mach_kernel.prelink)。但我想或許可以利用 10.4.11 的 Combo 整合更新包來提取其中一部分……
我非常希望能參與這類專案,但我嚴重缺乏這方面的底層技術知識,不知道該如何下手。意思是說,我了解 Mac OS X 的運作原理,對 UNIX 與 OSx86 也有相當不錯的認識……所以如果有人願意主導這項開發,我非常樂意盡我所能提供任何協助,反正正好需要一個有趣的暑期專案來打發時間。住在偏僻鄉下實在太無聊了!
@NebKiwi我非常希望能參與這類專案,但我嚴重缺乏這方面的底層技術知識,不知道該如何下手。意思是說,我了解 Mac OS X 的運作原理,對 UNIX 與 OSx86 也有相當不錯的認識……所以如果有人願意主導這項開發,我非常樂意盡我所能提供任何協助,反正正好需要一個有趣的暑期專案來打發時間。…
好,那我稍微修改一下核心編譯流程,使其能夠為 AppleTV OS Take 2 編譯出配搭自訂動態連結器(dynamic linker)的嵌入式核心……
之後你就可以將所需的組件(Kext 與驅動程式)預先連結進 mach_kernel 中(從而產生 mach_kernel.prelink)。
我也會重新編譯適用於 Tiger 的紅外線遙控器模擬器(IR Remote Emulator)……
兩者完成後我會一併發給你(不過我手頭上還有不少工作要忙……我明天就會開始著手處理這件事……)
@andyvand好,那我稍微修改一下核心編譯流程,使其能夠為 AppleTV OS Take 2 編譯出配搭自訂動態連結器(dynamic linker)的嵌入式核心……之後你就可以將所需的組件(Kext 與驅動程式)預先連結進 mach_kernel 中(從而產生 mach_kernel.prelink)。我也會重新編譯所需的紅外線遙控器模擬器(IR Remote Emulator)……
Andy,你實在太神了!真的萬分感謝你!你人太好了。還有其他人想一起加入嗎?有沒有時間充裕的 OSx86 終極極客願意一起參與?
AppleTV
好,我手頭上已經有一份完整的系統映像檔(2.3.1 版),並且已經回復到指定的硬碟分割區上了。萬事俱備,隨時可以開始測試!
@NebKiwi好,我手頭上已經有一份完整的系統映像檔(2.3.1 版),並且已經回復到指定的硬碟分割區上了。萬事俱備,隨時可以開始測試!
lol 借用微軟那個活寶 Ballmer 的名言……
@Steve Ballmer開發者、開發者、開發者!(Developers, developers, developers...)
好……我現在終於空出一些時間了,正開始更新原始碼以編譯出正確的核心……
編譯完成後我會再上來發帖……
目前進展非常順利……
不過為了編譯 dyld,我不得不先建立一套自訂的 SDK……
開發工作持續進行中……
@andyvand目前進展非常順利……不過為了編譯 dyld,我不得不先建立一套自訂的 SDK……開發工作持續進行中……
太棒了(W00T)……非常感謝你為這個專案付出這麼多心血!
@NebKiwi太棒了(W00T)……非常感謝你為這個專案付出這麼多心血!
好……自訂的 AppleTV dyld 已經編譯成功了(僅限 i386 架構……)
核心(Kernel)目前正在編譯中……
我想很快就能出爐了……
那麼顯示卡、音效卡、晶片組、無線網絡卡(WLAN)的驅動程式以及 AMD 支援度方面該怎麼辦呢……如果 AppleTV 底層依然基於 Tiger,而較新款的顯示卡只在 Leopard 下才有驅動支援,我能想像顯示卡部分應該會相當棘手。
不會有這個問題的……
這是一個專為 AppleTV 編譯的 Leopard 核心(不同於標準 AppleTV 所使用的 792.XXX.XXX 核心)。
它同樣能夠支援較新的 Kext,並完美運行其餘所有組件……
其他的 Kext 也都能正常運作(因為具備向下相容性),整個系統的其他部分也都會完美運行……
事不宜遲,我正式宣佈:
AppleTV OS 專用核心正式推出……
請從以下連結下載:
rapid share.com/files/230399705/AppleTV_Kernel.zip
AppleTV
我一回到家就會馬上測試!我現在人還在學院上課。多謝 Andy!
@andyvand事不宜遲,我正式宣佈:AppleTV OS 專用核心正式推出……請從以下連結下載:rapid share.com/files/230399705/AppleTV_Kernel.zip
如果這個核心真的能讓 AppleTV 在你的電腦上成功運行,請務必寫一份詳細教學告訴大家具體的設定步驟!如果真的成功,那絕對是一項史詩級的創舉!
或許你應該把它命名為修改版:AndyTV
如果有人能做出一個合適的安裝程式那就太棒了。你覺得它可以從 USB 手指或外置 USB 硬碟開機運作嗎?
@naquaada或許你應該把它命名為修改版:AndyTV。如果有人能做出一個合適的安裝程式那就太棒了。你覺得它可以從 USB 手指或外置 USB 硬碟開機運作嗎?
我想目前的計劃是等系統能夠順利開機運作之後,將它打包成一個 .pkg 安裝套件並整合進 Leopard 安裝 DVD 中,做成一個修改版安裝碟……
@NebKiwi我想目前的計劃是等系統能夠順利開機運作之後,將它打包成一個 .pkg 安裝套件並整合進 Leopard 安裝 DVD 中,做成一個修改版安裝碟……
測試進展如何?
有成功讓它正常開機引導嗎?
開機引導測試
@andyvand測試進展如何?有成功讓它正常開機引導嗎?
嗨 Andy,我現在累透了,準備先去睡覺……明天再來好好把玩測試一番。希望我能搞定這個該死的預先連結核心(prelinked kernel)……我會先試試看直接把 Kext 放進 /S/L/E 資料夾裏,看看能引導到什麼程度……
回頭見,有任何進展我會隨時向你回報。
Atv
非常希望能有志願者一起來幫忙測試這個專案……有人手頭上有幾 GB 的空餘硬碟空間嗎?目前系統在開機初期階段可以順利引導,但隨後會出現一些小錯誤,我們推測那只是我個人電腦的硬件相容性問題。如果你有興趣參與測試,請發私訊(PM)給我。多謝!
我可以幫忙測試看看從外置 USB 硬碟或 USB 手指開機引導……如果 2GB 容量不夠用的話,用 USB 外置硬碟肯定沒問題,裏面空間大得很。
@milanca我可以幫忙測試看看從外置 USB 硬碟或 USB 手指開機引導……如果 2GB 容量不夠用的話,用 USB 外置硬碟肯定沒問題,裏面空間大得很。
2 GB 應該就足夠了……(對於精簡系統分割區而言)
不過很可能需要將磁碟分割表設為 GUID 模式,並配置與真實 AppleTV 完全相同的分割區 GUID(共 4 個分割區,請參考 AwkwardTV Wiki 上關於使用外置硬碟的說明……那份分割區指南應該可以直接套用)。
好的 Andy,多謝你……我手頭上剛好有一顆完全空白的 USB 外置硬碟,可以隨意進行分割而不用擔心資料遺失。請把相關資訊私訊(PM)發給我,我可以在我的幾台機器上進行測試。
我也很想幫忙測試這個專案……
不過我用的是 AMD 平台。請問這個 AppleTV 核心能在 AMD 系統上運作嗎?
還有,具體該如何設定這一切呢?
是直接把 AppleTV OS 映像檔回復到硬碟上,替換掉核心,加入所需的 Kext,然後直接開機引導嗎?
多謝!
請直接從 Apple 官方伺服器下載映像檔:點此下載 (mesu.apple.com/data/OS/061-5816.20090224.At23V/2Z694-5587-18.dmg)
將裏面的核心替換為 Andy 在本帖發佈的核心,並將所有預設的 Leopard 核心延伸模組(Kext)複製過去,當然要記得使用 Andy 壓縮包內提供的 System.kext 與 IPFirewall.kext。接著刪除 extensions 資料夾中預設附帶的 watchdog kext,修復權限後即可嘗試開機引導……基本流程就是這樣。祝各位玩得開心!
至於 AMD 與 Intel 平台的支援度……我也不太清楚。但既然這個核心是基於 Andy 的核心原始碼編譯而成,我想應該都能正常運作。
我掛載了磁碟映像檔,但沒看到 watchdog kext。請問還需要其他資訊或特殊步驟嗎?我非常想動手玩玩看。
補充編輯:沒事了,我找到它了。所以基本上只要把我們平時用的 Leopard Kext 複製過去就行了,對吧?聽起來挺簡單的。
@Hara Taiki我掛載了磁碟映像檔,但沒看到 watchdog kext。請問還需要其他資訊或特殊步驟嗎?我非常想動手玩玩看。補充編輯:沒事了,我找到它了。所以基本上只要把我們平時用的 Leopard Kext 複製過去就行了,對吧?聽起來挺簡單的。
差不多就是這樣沒錯。祝你玩得開心!
@NebKiwi差不多就是這樣沒錯。祝你玩得開心!
請問你可以發一份詳細的操作步驟教學嗎?
我已經從 Apple 網站下載了 DMG 檔,並將它回復到一隻 USB 手指上。
接著把我的 Leopard Kext 複製並覆蓋掉 OSBoot 的 Kext,又複製並替換了 Andy 的 mach_kernel、System.kext 與 IPFirewall.kext,同時刪除了 watchdog。
最後安裝了 Chameleon EFI,並修復了檔案權限……
但當我開機引導時,畫面卻先顯示「error parsing plist fileloading Darwin/x86」,
隨後就跳出「errors encountered while starting up the computer」(啟動電腦時發生錯誤)。
@NebKiwi請直接從 Apple 官方伺服器下載映像檔:點此下載 (mesu.apple.com/data/OS/061-5816.20090224.At23V/2Z694-5587-18.dmg) 將裏面的核心替換為 Andy 在本帖發佈的核心,並將所有預設的 Leopard 核心延伸模組(Kext)複製過去,當然要記得使用 Andy 壓縮包內提供的 System.kext 與 IPFirewall.kext。接著刪除…
所以你已經成功讓它跑起來了嗎?
如果成功了的話,能不能分享一些實測影片或截圖呢?
我也正準備自己動手試試看。
補充編輯:
我想我剛才把自己的系統徹底搞掛了……
這已經是我這個星期第二次搞掛系統了
我建立了一個新分割區,並把 OSBoot 回復到該分割區上。
接著我替換了所有核心延伸模組(Extensions),刪除了 watchdog,並放入了 AnV Apple TV 核心。
結果當我嘗試開機引導時,畫面只顯示了
「boot0: done」(印象中是這句),然後電腦就直接自動重啟了……
我試著用安裝 DVD 把那個 AppleTV 分割區刪掉,但現在從原本的 OS X 硬碟開機時,卻一直跳出記憶體配置錯誤(memory allocation errors)……
請問有辦法把 Chameleon 重新修復還原到硬碟上嗎?
我原本使用的是最新版本……
多謝!
請問該如何為加入到 OSBoot extensions 資料夾內的 Kext 修復權限?
@pαuℓzurrr.所以你已經成功讓它跑起來了嗎?如果成功了的話,能不能分享一些實測影片或截圖呢?我也正準備自己動手試試看。補充編輯:我想我剛才把自己的系統徹底搞掛了……這已經是我這個星期第二次搞掛系統了 我建立了一個新分割區,並把 OSBoot 回復到該分割區上。接著我替換了所有核心延伸模組(Extensions),刪除了 watchdog,並放入了 AnV Apple TV 核心。結果當我嘗試開機引導…
拜託有人能幫幫我嗎?
我在一個 USB 分割區上安裝了 OS X,現在雖然能讀取到機內硬碟,但系統卻完全無法掛載我的主分割區!它跳出錯誤提示說必須先對該分割區執行「修理工具」(First Aid),但當我執行修復時,卻出現以下錯誤:
Verifying volumes "disk0s2"
** /dev/disk0s2
Invalid BS_jmpBoot in boot block: fa31c0
Error: File system verify or repair failed.
請問我還有辦法救回硬碟裏面的資料嗎?
請問有人可以把修補好的 AppleTV 2.3.1 版 Finder 傳給我嗎?
展開其餘 4 則社群技術筆記完整歷史討論紀錄
Well my hdd was ----ed up and i needed to write zero's to make it work again...
So warning to all, Don't Install On Same HDD as you're running install...
ok, i've patched the appletv finder and managed to boot to the itunes pairup screen.
but i have no way of controlling it
the keyboard and mouse won't work
@alexkiddok, i've patched the appletv finder and managed to boot to the itunes pairup screen. but i have no way of controlling it the keyboard and mouse won't work
You need to install the remote emu by Brandon Holland:
brandon holland.com/irkeyboardemu.html
This will allow you to control aTV with a USB keyboard
have any one tried appletv os 2.4 ?
it seems that they have added some checks to prevent non atv hardware to sync with itunes.
hopefully someone will come out with a patch.
文獻來源與貢獻者溯源名錄(共 8 位具名成員 · 原始討論串 #2738)
| 成員用戶名 | 本卷貢獻角色 | 發帖數 | 活躍時間窗 |
|---|---|---|---|
| @andyvand | 核心貢獻者 | 15 | 2009-05-04 → 2009-05-10 |
| @NebKiwi | 主筆作者 | 12 | 2009-05-01 → 2009-05-17 |
| @alexkidd | 核心貢獻者 | 6 | 2009-05-18 → 2009-08-06 |
| @naquaada | 核心貢獻者 | 5 | 2009-05-01 → 2009-05-08 |
| @pαuℓzurrr. | 核心貢獻者 | 4 | 2009-05-17 → 2009-05-20 |
| @cmdshft | 核心貢獻者 | 3 | 2009-05-01 → 2009-05-17 |
| @milanca | 協作成員 | 2 | 2009-05-10 |
| @BlackCH | 協作成員 | 1 | 2009-05-21 |