2012年11月21日 星期三

Lion on Lenovo S10

Preface

OS 從 32-bit 轉移到 64-bit 是一個不可逆且是正向的潮流(利用其提升的定址能力,增進內部傳輸的效率,可使用更多的 RAM, ..., etc),但我還是想了解 How can 32-bit CPU do its best? 時至今日的主流 OS 依然對其支援,不論是新出的 Windows 8,或是 Linux Family;但自我風格強烈的 Mac OS X 選擇放棄 32-bit, 將重心完全推入 64-bit,就在今年的 10.8 Mountain Lion。

10.6 Snow Leopard 尚且支援 32-bit CPU,10.8 Mountain Lion 確定沒有 32-bit mode,這是我在 Wiki 查到的明確結果。但是 10.7 Lion —— 在中文與英文版的 Wiki 講法就有些出路 —— 在支持平臺上,中文版是說 x86, x64 CPU 皆有支援,但英文版表示僅有 x64。不過就這一點讓我燃起 S10 也能裝上 Lion 的期待。

而針對 S10 如何 Hackintosh 的教學,網路上找的到,且足夠明確,皆是 based on Snow Leopard。二鳥在林不如一鳥在手,初次搞 Hackintosh 還是先可以穩穩用再說,當下就選擇學習如何搞定 Snow Leopard。而在這期間,我亦慢慢地了解 Mac OS X 的系統結構,也理出 Lion 的那份過渡性,真正的狀況是:

Lion 的 driver 依舊保留 32-bit 部分,而 kernel 亦能透過參數設定(arch=i386) 來使用 32-bit driver,但有一些關鍵 components 僅有 64-bit,導致 32-bit CPU 無法使用。

體會至此,我也有一種既然如此,那就不要強求的想法,直到我讀到 Prasys 的文章 (OSX Lion on my netbook – proof of concept - http://prasys.info/2011/08/osx-lion-on-my-netbook-proof-of-concept/, comments 很重要!) 以及 Traveller 寫的 Lion 安裝概略(HCL 10.7.0/Portables - http://wiki.osx86project.org/wiki/index.php/HCL_10.7.0/Portables#Compaq_CQ_10-110ES) 完全搔起我對 S10 Atom N270 運行 Lion 的好奇心,以下就是騎「獅」難下的血淚史:

開始之前,如果是和我同有 S10 的朋友,推薦這篇文章 (Guide on how to install Lion DP1 (build 11A390) on Lenovo IdeaPad S10 and S10e - rolf -
http://s10lenovo.com/viewtopic.php?f=33&t=4802&start=60#p32201),雖然是 DP1 的事,了解過後將有助於接下來的理解。

[Preparation]

  1. Hardware: Lenovo S10(Existed Snow Leopard), Acer 5920G(Core 2 Duo T7500), USB HDD 320G
  2. Software: Mac OS X Lion Install DVD(10.7.0), Mac OS X Lion Combo Update(10.7.5)

Lion 10.7.0 Installation

[S10 Side]

  1. 使用 S10 的 Snow Leopard,透過磁碟工具程式將 Lion 10.7(11a511) 回復到 USB 外接硬碟上
      步驟簡述如下,細節請自行參考網路上的教學:
    • 將 InstallESD.dmg 底下的 BaseSystem.dmg 掛載之後,回復到要做為安裝的空白分區(> 5G)
    • 刪除安裝分區下的 /System/Install/Packages(是個捷徑)
    • 同目錄下,新增一個 Packages 資料夾
    • 把 InstallESD.dmg 的 Packages 資料夾之所有 .pkg, .mpkg 複製到剛剛新建的 Packages 下
    • mach_kernel 複製到安裝分區的根目錄
    • 把修改過的 OSInstall 取代 /System/Library/PrivateFrameworks/Install.framework/Frameworks/OSInstall.framework/Versions/A/OSInstall (for installation on MBR)
    • 同為修改過的 OSInstall.mpkg 取代 /System/Installation/Packages/OSInstall.mpkg (安裝時可細部自定,無須全部安裝,且需與 OSInstall 對應)

    • p.s. 如需查看隱藏檔,可透過 Houdini
  2. 在回復的分區上安裝 Chameleon
  3. 在 /Extra/Extensions 加入 ElliottForceLegacyRTC.kext(不使用的話,確定 5920G BIOS 會被 Reset), FakeSMC.kext, NullCPUPowerManagement.kext, patched IOPCIFamily.kext v2.6.7(5920G 會卡 PCI Configuration)

[5920G Side]

一開始是照著 Traveller 所寫,將安裝分區下該替換的檔案都替換下來,然後用 S10 開機去安裝,但是不知什麼原因,它會卡在 launchd錯誤(describe as this[http://osx86.co/f36/legacy-kernel-10-6-8-with-custom-dyld-t7318/post54897.html]),導致根本進不去安裝畫面(語言選單)。想說要放棄之際,突然看到有人提及 SuperDuper 這個備份軟體。靈機一動,乾脆先用支援的 CPU(bypass vanilla 的檢查) 安裝,之後再把該分區 copy 回 S10,因此就決定使用 5920G 的 T7500 來執行這個任務:
  1. 使用 5920G 選擇從 USB HDD 開機
  2. [Note] PCI Configuration Hangs

    Solution: 在(重大突破!完美解决较低配置困扰已久的PCI configuration begin,可使用原版IOPCI! - jjzxg - http://bbs.pcbeta.com/viewthread-1122678-1-1.html) 有提供 patched IOPCIFamily v2.6.7, 用來取代 10.7.0 裡的 v2.6.5, 便可順利度過。
  3. 進入安裝界面後,選擇將 10.7.0 安裝在 USB HDD 上事前分割出來的分區裡。
  4. 安裝完成後,系統會自動重新啓動,但因為新裝的分區上沒有任何破解用檔案,直接懸停當機。長按電源鍵關機
  5. 拔出 USB HDD,然後重新插回 S10,將安裝分區上的 /Extra/Extensions 複製到新安裝的 Lion 分區。
  6. 再到 5920G 用 USB HDD 開機,進入新安裝 Lion 分區。依照指示進行帳戶相關設定,然後進到桌面。
  7. Lion 10.7.0 安裝完成

Update to 10.7.5

  1. 先在 5920G 下載 OS X Lion Update 10.7.5 (Client Combo),將這個 .dmg 放在內部硬碟(讀取速度快)
  2. 再把 USB HDD 插回 S10, 用 Snow Leopard 的磁碟工具程式,把 Lion 回復到 USB HDD 預留的另一個分區,完成後將分區名稱改為 Lionbak
  3. [Trick] Lionbak = Lion Back up!!!

    有經驗的人會發覺第 2 步根本是在備份 Lion,沒錯!它確實有這樣的一個目的,更重要的是為等會升級為 10.7.5 做準備。因為如果直接使用 Combo Update 10.7.5 更新系統所在的分區時,會有 KP。所以必須把 Combo Update 10.7.5 拉到外面來做,但在 Snow Leopard 下,Combo Update 會判定系統不是 Lion 不給執行,只好如此迂迴的搞出另一個 Lion 系統 —— Lionbak,透過它來更新原先的 Lion (順便備份)。

    根據查到的資訊,其實有更簡單,且可直接在 Lion 系統上做 10.7.5 的 Combo Update, 請先跳到第 4 步,將含有序號smbios 放入 /E/E 裡,就不會有 ApplePolicyControl 的 KP。理論上是沒問題,但我沒實際跑過,可以試試,看起來省時省力!
  4. 用 5920G 開機進 Lionbak,然後執行 Combo Update 10.7.5,並將對象選擇為 USB HDD 上的 Lion
  5. 完成 Update 後,將 (新手常见(五国)(-v图)错误解决(原版,破解kernel,补丁kext下载) - crazybirdy - http://bbs.pcbeta.com/viewthread-863656-1-1.html) 裡 A26 所說的具序號smbios(Mac BookPro 8.1, iMac 12,1 應該也可以,就選擇一個硬體設備相近的) 放進 Lion 磁區的 /Extra/Extensions。
  6. 再次替換 IOPCIFamily.kext(v2.7, 還是會讓 5920G 卡 PCI Configuration) 為 patched v2.6.7。更換前,請先備份,因為 S10 在 Lion 沒有卡 PCI Configuration 的問題,可直接使用 v2.7, 稍候換回。
  7. 重新開機,選擇 Lion 分區進入,能成功進入後,點選 "關於這台 Mac" 查看是否為 10.7.5。若確認無誤,那麼恭喜 update 成功

Back to S10

  1. 先在 Snow Leopard 上插回 USB HDD,再次使用磁碟工具程式,選擇 USB HDD 的 Lion 分區回復到 S10 上已事先分割出來的分區。
  2. 使用 Lion DP1 Kernel
    1. 將 andyvand (Lion+Snow bootloader and Lion DP2 atom 64bit kernel - http://osx86.co/f36/lion-snow-bootloader-and-lion-dp2-atom-64bit-t7131/)所製作的 Lion DP1 patched kernel [mach_kernel_dp1_atom_apic(11.0.0 root:xnu-1699.21.15~1)] 複製到根目錄。
    2. org.chameleon.Boot.plist 添加 <key>Kernel</key> <string>mach_kernel_dp1_atom_apic</string>
  3. 可用驅動
    • 鍵盤&滑鼠

      VoodooPS2Controller.kext, AppleACPIPS2Nub.kext(小 bug:USB 滑鼠的捲動方向相反 —— 往下滾時,頁面是向上瀏覽;上滾時,頁面卻是向下瀏覽)
    • 圖形顯示

      使用 rolf (OS X Lion on S10e - http://s10lenovo.com/viewtopic.php?f=33&t=4802&start=60#p32201 ) 為安裝 DP1 所修改的 AppleIntelGMA950.kext(v7.0.31_patch <-- v7.4.1), AppleIntelIntegratedFramebuffer.kext(v7.0.31_patch <-- v7.4.1),並在 org.chameleon.Boot.plist 添加 <key>device-properties</key> <string>6d0000000100000001000000610000000200000002010c00d041030a000000000101060000027fff0400100000006d006f00640065006c0000000b000000474d4120393530200000004100410050004c002c00480061007300500061006e0065006c0000000800000001000000</string>
    • 音效

      VoodooHDA.kext(v2.7.4)
    • Wireless

      IO80211Family.kext(v3.2_patch <-- v4.2)
    • Ethernet

      BCM5722D.kext
    • Battery

      Snow Leopard 10.6.8 的 AppleACPIPlatform.kext(v1.3.6_stock <-- v1.5) + VoodooBattery.kext
    • Speedstepping

      VoodooPowerMini.kext(v1.2.49)
    • IOStorageFamily

      使用 10.7.0 的 IOStorageFamily.kext(v1.7_stock <-- v1.7.2)
    • [Note] still waiting for root device!!!

      如果我們使用 10.7.5 的 IOStorageFamily.kext(v1.7.2),系統開機時會發生 AppleFileSystemDriver 錯誤,檔案系統無法載入,造成 still waiting for root device。推測 IOStorageFamily.kext 有變更,導致 ooooold DP1 kernel 無法順利使用 AppleFileSystemDriver.kext。
      這層神奇的關係在
      都有提及,AMD 也有這個問題,看來這是使用舊 kernel 的通病,發生的其間都是更新 10.7.4 所致,因此 IOStorageFamily.kext 至少得回復到 10.7.3 之前的版本(有 v1.7.1??? v1.7.0 確定可用)
    • IOPCIFamily

      IOPCIFamily.kext(v2.6.7_patch --> v2.7_stock),因為 S10 很神奇地不卡 PCI Configuration, 那我們就換回 10.7.5 的原版 kext。
  4. 更換 Finder
    10.7.0 的 Finder 已經是 64-bit app(會出現白色禁止符號),S10 完全無法使用。32-bit app 的最後一個版本似乎是 DP2(http://www.mediafire.com/?2560lfp1i63hmec),請用它替換 /System/Library/CoreServices 下的 Finder。

    [Trick] 增加 Finder 的顯示語言

    本來這應該是透過安裝語言套件就可解決的 easy job,可惜對象是已經分離出來的 app。而網路上所提供的 DP2 Finder 通常為了縮減體積,可能都僅留下英文的界面,但其實我們只要把中文的字檔資源放回 Finder.app 底下就好。可是我們要如何取得 DP2 Finder 英文以外的字檔?一個直觀卻暴力的做法:「新安裝一個 Lion DP2 的系統,同時選擇安裝全語言套件,之後再取出 Finder.app 來用」。不過殺雞焉用牛刀,這麼做也太麻煩,況且 DP2 的 kernel 早就是 64-bit,真要安裝 DP2 那麼就如同要再跑一次 10.7.0 安裝流程,太不符合經濟效應。其實我們可以直接向 10.7.5 的 Finder.app 來偷天換日,以下為其流程:
    1. 在 10.7.5 Finder.app 上按右鍵,選擇 "顯示套件內容",會彈出一個視窗。
    2. 點選滑鼠到 Contents/Resources 目錄下,這就是 Finder.app 所用到資源之目錄,你會發現除了許多圖檔外,有不少資料夾是以 .lproj (e.g., English.lproj, zh_TW.lproj, ..., etc)做結尾的,這些就是語言字檔。
    3. 選取你想要的字檔資料夾,並且複製。
    4. 開啓 DP2 Finder.app 的 Contents/Resources 目錄。
    5. 將剛才複製的 .lproj 檔貼上。
    6. 把這個多了新語言字檔的 Finder.app 丟入 Lion 的 /System/Library/CoreServices,並修復權限。
    7. 重開機後,Finder 就會根據系統的語言對應顯示。
    當然,也許會有字檔對應不完全的問題,但至少選單上的翻譯都沒有少(我用繁體中文,95% 以上完備),而且方便又快速,這才是重點!
  5. 重新開機,選擇 Lion 磁區進入,建議在 Chameleon 選單時加上 -v -f,以方便 debug,經過一大串數量誇張的 kernel parameter can't find 之畫面後,顯示登入畫面;正常的話,解析度是 1024 x 600,且開啓圖形加速。輸入密碼後,就會看到 Lion 的桌面。點選 左上角的蘋果 --> 關於這台 Mac,你會發現真的是 10.7.5!

Problem

順著上述步驟,確實讓 S10 吃上 Mac OS X Lion 10.7.5,但一剛進入後,就會發現非常的 lag。打開活動監視器一看,吃 CPU 資源第一名的是叫 mds 的程序,不僅如此,CPU使用率根本都是滿百。如果有裝過 Lion DP1 的人,應該有注意到這個狀況,mds 是 Spotlight 的 process,它會花一段不短的時間做 indexing,當然它會視你硬碟上檔案的多寡,決定需要花費的時間,3 - 4 hours 甚至花上半天都有可能。當然有加速的方法,就是只讓它 indexing 你的開機磁碟(否則一些搜尋的系統功能會無法使用),其它的非開機磁碟透過 系統偏好設定 --> Spotlight --> 隱私,通通打入禁止 indexing 名單,如此一來應該會加快不少。

就 DP1 的情況而言,解決 Spotlight 之後,CPU resource 使用率就會恢復到一個正常值(開機之後,CPU 資源閒置 % 在 80% 以上)。但是 10.7.5 並非如此,開完機後,打開活動監視器一看:「CPU 資源使用率 100%!!」,佔用排行榜前三名依序為 syslogd, revisiond, launchd,只要仔細地觀察一、兩分鐘,會發覺這三個人,都有能力在一瞬間吃光所有 CPU resource 的能力,而 syslogd 基本上都是從 60% 起跳,80% 是平均,90% 不意外。

syslogd -- 光看名字也不難猜出它是做什麼用的 -- 系統紀錄,但為什麼系統紀錄會佔用 CPU 資源到如此誇張的地步?

證據是顯而易見,打開 工具程式 --> 系統監視程式,點開左邊的 kernel.log,然後放開你的滑鼠,仔細看,kernel 正以非常高的頻率在報錯,即使是你停下滑鼠之後。裡面最常見的訊息就是
kernel xxx parameter can't find...
這說明了 DP1(Darwin 11.0.0) 的 kernel 與 10.7.5(Darwin 11.4.2) 間存在非常巨大地差異,當它與 10.7.5 的驅動程式溝通時,有著相當嚴重地牛頭不對馬嘴。和一堆常駐的 daemon 亦不例外,終究導致無時無刻都在報錯,syslogd 有寫不完的 log。

其實這問題,和正式版(10.7.0) 的 kext (我有先留在 10.7.0 測試過) 就如此,到了 10.7.5 想當然爾,情況只有更壞不可能更好。說真的,要用 DP1 的 kernel 去驅動 10.7.5 的 driver 確實有些強人所難。但整個 Lion 的歷史中,也只有 DP1 的 kernel 還支援 32-bit 的 CPU,為了讓 S10 用,也只能硬著頭皮上。

DP1 kernel 是完全一無是處嗎?卻也不是這樣,就一個 Demo 來說,它算是成功,也就是說,除了 syslogd 等 daemon 佔據 95% 以上的 CPU resource 外,配合上置換的 kext 幾乎是能完整驅動 S10(QE/CI, resolution = 1024 x 600, WiFi, Ethernet, Audio, Keyboard & Mouse 均可工作)。但高 CPU 佔用率這個問題,就足以摧毀一切,開機前五分鐘,也許開啓一些程式,尚可競爭到一些資源;五分鐘後,因為這些程式在使用當中,不可避免地會透過 driver 使用到硬體,一使用 driver 就會讓 syslogd 報錯情況加劇,加劇後佔用更多的 CPU resources, 之後整個系統就 hang!

如果你真的使用過,就會發現,連關機都是一件可遇不可求的事!(開機後等系統載入完畢立刻關機,大概十次只會成功一次,隨著因無法正常關機而強制 power off, 導致系統異常的機會增加,降低下次正常關機成功率。在這惡性循環下,終將使整個系統趨向不可用!)

對於 syslogd 的問題,我也是試圖透過 # launchctl unload com.apple.syslogd 阻止它工作,但它旋即重新載入,無效!

如果直接將 /System/Library/LaunchDaemons/com.apple.syslogd.plist 刪除,那會無法進入 10.7.5 系統,還是無效!

因為能力有限,解題到此我也束手無策,雖然不甘心,但也只能接受,S10 真的無法拿 Lion 來作日常使用。當然如果有高手能破解這個難題,希望您也不吝指教!如果可以,我還是很樂意再做嘗試,希望有一天真能讓 S10 馴服 Lion! ^^

沒有留言:

張貼留言