淺談小米平板2的啟動與雙系統(tǒng)切換機制

作者:亞馬遜的蝴蝶(Butterfly_of_Amazon)


小米公司于2015年11月推出小米平板2,至今已經(jīng)5年多,該款平板雖然已可歸為老機型,但以高分辨率的屏幕、美觀大方的外形、支持雙系統(tǒng)的x86架構,以及硬件可魔改升級的特點,至今依然得到大批粉絲的喜愛。

我去年開始與一群愛好者共同研究小米平板2雙系統(tǒng)刷機方法,研制的刷機包和配套教程成為網(wǎng)上傳播最廣、用戶最多的的雙系統(tǒng)安裝工具。在這個過程中,我對小米平板2的啟動過程和雙系統(tǒng)切換機制有了一定的了解,通過這篇文章進行簡單的總結。

我將結合遇到問題、解決問題的過程來講述,沒有什么專業(yè)術語。關注我的公眾號的朋友們中,有很多是小米平板的用戶,你們既然花了這么多時間來刷機,那就再花點兒時間來了解你手中的這臺機器吧。


小米平板2采用了目前主流的 UEFI 引導管理機制,具備安全、靈活的特點,也為用戶自行定制提供了基礎。

一、啟動過程

小米平板2加電后完成硬件自檢與 BIOS 引導,然后將控制權交給 UEFI 。UEFI 的運行過程可以簡單理解為:訪問 U盤或硬盤里 Fat32 格式的EFI系統(tǒng)分區(qū)(ESP),調(diào)用后綴為 .efi 的系統(tǒng)啟動文件(OS Loader),通過啟動文件加載 MIUI 或 Win10 等操作系統(tǒng),最后把控制權交給新啟動的系統(tǒng),完成啟動過程。

但是平板中可能有很多啟動文件,UEFI 怎么知道該調(diào)用哪個呢?原來,調(diào)用過程遵守“按啟動序列中的順序依次調(diào)用啟動項”的原則。

平板中有兩個全局變量,一個存放所有啟動項,一個存放啟動順序,這兩個變量共同定義了啟動序列。UEFI 獲得控制權后會先訪問這兩個變量,以決定下一步的操作。用戶可以修改這兩個變量的內(nèi)容,增加自己的啟動項,調(diào)整啟動順序,以達到優(yōu)先調(diào)用用戶的啟動文件,啟動用戶想要的系統(tǒng)的目的。

但有個問題:如果由于用戶失誤,設置了無法正常啟動的文件,那么每次開機時平板都先調(diào)用有問題的啟動項,導致系統(tǒng)無法正常進入操作系統(tǒng),那豈不進入了無法控制的狀態(tài),導致所謂的“變磚”?

小米平板2設計者充分考慮了這個情況,內(nèi)置了另一個機制:只要平板識別到 U盤,就會檢查 U盤中是否有 Fat32 格式的分區(qū),如果有,則在這個分區(qū)中查找 \EFI\Boot\Bootx64.efi 文件。如果找到了,就會自動把這個文件添加到啟動項中,并把它設置為啟動順序中的第一個,然后啟動該啟動項。因此,只要 U盤的這個啟動文件正常,你就可以以它為入口,進入某個系統(tǒng),比如PE,獲得控制權去修正之前犯下的錯誤。因為對 U盤的控制權在你的手里,你可以隨時重做 U盤,甚至更換 U盤,因此只要你把 U盤做好,你就一定能取回對平板的控制權。

這就是我經(jīng)常安慰機友的原因:“小米平板2變磚并不容易,只要屏幕能亮,U口沒壞,平板就變不了磚”。平板啟動失敗后一般會不斷嘗試重啟,即使有時剛開機或強行重啟時不識讀 U盤,也沒有關系,等它自動重啟(不通過按電源鍵重啟)后,一般都能恢復識讀。

二、安全機制

使用 UEFI 的計算機普遍啟用了安全啟動選項(UEFI Secure Boot),用于避免非授權啟動文件的運行。小米平板2也不例外,并且更甚一步,不但啟用了安全啟動,而且即使用戶進入 BIOS 手工把安全啟動關閉,一段時間后平板會把它自動打開。

因此,小米平板2的安全啟動機制是做得比較嚴格的,但在保證安全的同時,也降低了用戶 DIY 的靈活度。也就有了那個梗:有用戶對“游戲塵間”(最早制作小米平板2雙系統(tǒng)切換功能的那位高手)吐槽切換操作不方便時,“游戲塵間”建議用戶“致電雷軍”。

UEFI Secure Boot 的存在,導致只有兩種 efi 文件可以成為小米平板2的啟動文件:一種是小米公司自己制作的 efi,它可以使用小米平板2最底層的一些機制獲得合法運行權,這個文件就是我們在安裝 MIUI 后,在 ESP 分區(qū)中看到的那個 \EFI\Boot\Bootx64.efi 文件;另一種就是獲得了微軟CA認證的文件。因為 Secure Boot 最初是由微軟公司推出的,多年來微軟利用其自身地位強行推廣,已經(jīng)形成廣泛使用的既成事實,目前基本上所有使用 UEFI 的計算機主板都集成了微軟的 CA 證書,主流的 Linux(如:Ubuntu、Redhat)等操作系統(tǒng)通過取得微軟的證書簽名,得以在使用 UEFI 的計算機上合法運行。

目前各大操作系統(tǒng)廠商之所以甘于屈居微軟的認證體系之下,一是由于反抗即成事實的代價太大,二是微軟用實力和信譽做擔保,至少到目前做到了公平。但在極端情況下,比如中美脫鉤,微軟是否還能保證公平,UEFI 是否會成為中國公司的一個軟肋,已經(jīng)成為國內(nèi)業(yè)界的熱門話題。這個留到以后再說。

在小米平板2雙系統(tǒng)刷機過程中,共涉及三個啟動文件,第一個是前面說到的MIUI 的 Bootx64.efi,第二個是 Win10 的啟動文件 Bootmgfw.efi,第三個是 Shimx64.efi。后面這兩個屬于取得微軟證書簽名的第二種文件,但 Shimx64.efi 不是操作系統(tǒng)的啟動文件,它與 rEFInd 共同為用戶提供選擇界面,讓用戶決定下一步啟動哪個系統(tǒng)。關于 Shimx64.efi 我會在后面詳細講解。

看到這里,你大概能明白小米平板2的雙系統(tǒng)開機切換功能為什么不容易實現(xiàn)了:由于安全啟動的存在,導致第三方開發(fā)者的選擇非常有限,只能在狹窄的縫隙中尋找騰挪空間。

三、選擇機制

在小米平板2上安裝雙系統(tǒng),實現(xiàn)雙系統(tǒng)切換功能,實際就是要給用戶以選擇權,讓用戶能自主決定進入哪個系統(tǒng)。我們使用了 rEFInd 提供的選擇機制來實現(xiàn)這個目標。

rEFInd 是一個被廣泛用于 UEFI 多系統(tǒng)啟動場景的解決方案,最大特點是平臺無關和操作簡便。它最初被“游戲塵間”用于實現(xiàn)小米平板2刷機和雙系統(tǒng)切換,我們繼承了“游戲塵間”的思路,將其用于目前這版廣泛流傳的刷機工具和雙系統(tǒng)開機切換方案中。

圖1

rEFInd 與 Shimx64.efi 相結合,完美地在刷機和開機時給用戶提供了美觀、易操作的選擇界面,并在一定程度上減少了 UEFI Secure Boot 對用戶 efi 的限制。

Shimx64.efi 使用了 Secure Boot 的鏈式認證機制。前面已經(jīng)說過,Shimx64.efi 已經(jīng)取得微軟CA認證簽名,可以在小米平板2開機時合法運行,鏈式認證機制允許 Shimx64.efi 對 rEFInd 的 grubx64.efi 進行合法性認證,只要認證通過就可以被 Shimx64.efi 調(diào)用。grubx64.efi 的主要功能是給用戶提供選擇菜單(圖1),用戶選擇某一菜單的操作實際也是調(diào)用某個 efi 文件,grubx64.efi 對用戶選擇的 efi 認證通過后授權其運行。通過這種鏈式授權方式,減少了 UEFI Secure Boot 對 efi 的限制,未直接獲得微軟認證的軟件只要能由這種鏈式授權認證通過,也將被允許運行,因此簡化了認證過程,用戶可以使用的 efi 大為增加。

那么什么樣的 efi 能通過這種方式獲得授權呢?Shimx64.efi 調(diào)用 grubx64.efi 時,會對比小米平板2主板中存放的個人證書(注意:是個人證書,不是微軟發(fā)布的正式證書),如果 grubx64.efi 已經(jīng)獲得該證書的簽名,則認證通過予以運行,否則彈出“驗證失敗,拒絕訪問”的報錯。

然后要求用戶導入 cer 證書,如果用戶能導入對應的 cer 證書文件,則允許 grubx64.efi 運行,否則退出。

用戶在 grubx64.efi 提供的選擇菜單調(diào)用的某個 efi 文件,也是通過這種方法進行認證。因此,用戶如果能保證 cer 證書正確導入平板,并且除 Bootx64.efi、Bootmgfw.efi 和 Shimx64.efi 這三個文件外的所有其它 efi 都經(jīng)過該證書簽名,就可以在小米平板2上通過這種鏈式認證方式得以合法運行。

我們制作的刷機包中提供了個人證書,也就是上圖中的 Butterfly_of_Amazon.cer,刷機包中的各個 efi 文件也用該證書進行了簽名,因此只要按教程把這個證書導入平板,就可以正常使用刷機包和它提供的開機切換功能。

第一次使用刷機包進行刷機時,由于證書尚未導入,所以需要進入 BIOS 手工關閉安全啟動選項,等完成證書導入后就可以省略這個步驟了。

證書是存放在主板上的,導入一次永久有效,哪怕將硬盤中所有分區(qū)都刪除,也不會影響已導入的證書。但重刷 BIOS 會清除證書,因此每次刷完 BIOS 都會出現(xiàn)藍色窗口讓用戶重新導入。

四、雙系統(tǒng)切換功能的實現(xiàn)

前面講了小米平板2的啟動過程、安全機制和選擇機制,有了這些基礎,下面說說我們是怎么實現(xiàn)雙系統(tǒng)切換功能的。

我們制作的刷機工具提供了兩種雙系統(tǒng)切換方法:一鍵切換和開機切換。

1. 一鍵切換

一鍵切換的原理相對簡單:(1)用戶在 MIUI 系統(tǒng)中運行 And2Win,這個 APP 會將 Win10 的 Bootmgfw.efi 改名為 Bootx64.efi,復制到平板的 ESP 分區(qū)中替換 MIUI 啟動文件 \EFI\Boot\Bootx64.efi,然后重啟平板。平板啟動時調(diào)用 \EFI\Boot\Bootx64.efi,而此時這個文件實際是 Bootmgfw.efi,因此實際啟動的將是 Win10;(2)由 Win10 切換到 MIUI 系統(tǒng)的過程類似,用戶在 Win10 中運行 Android 快捷方式,它將 MIUI 啟動文件 Bootx64.efi 復制回 ESP 分區(qū)的 \EFI\Boot\ 中,替換掉 Bootmgfw.efi,然后重啟平板,平板啟動還是調(diào)用 \EFI\Boot\Bootx64.efi,而此時這個文件是 MIUI 的啟動文件,因此平板將啟動 MIUI 系統(tǒng)。

原理詳見下圖:

2. 開機切換

如果你安裝的是開機切換功能,那么每次啟動平板時,會出現(xiàn)下圖的系統(tǒng)選擇菜單:

左邊大圖標為進入 Win10 系統(tǒng),右邊大圖標為進入MIUI 系統(tǒng)。

原理詳見下圖:

理論這層窗戶紙捅破后,其實很簡單。我動筆前覺得這篇文章需要寫好幾天,可寫了3500 字后,卻發(fā)現(xiàn)畫完上面兩張流程圖后就可以收尾了。

實際在刷機包的研發(fā)過程中,我和小伙伴們克服了無數(shù)的困難,比如:PE 分辨率太高字體太小問題、安裝 Win10 經(jīng)常異常問題、Win10 映像的驅(qū)動集成問題、Remix 和 Lineage、RR 的硬盤克隆問題、第三方 REC 刷入 zip升級包問題、安卓系統(tǒng)下如何自動恢復 rEFInd 啟動文件問題、個人證書更換問題、BIOS 刷入工具移植問題、Win10 啟動序列自動更改問題、開機切換圖標用戶DIY問題、ESP 序號變化導致一鍵切換失效問題、開機切換多按一下確認鍵問題、啟動分區(qū)過小導致 Win10 引導文件生成失敗問題、Win10 啟動分區(qū)容量不足導致升級失敗問題,等等。每一個問題的解決都花費了我們諸多的心血。由這個項目,我深深體會了將理論知識轉(zhuǎn)換為工程成果需要經(jīng)歷多少艱苦的工作,但這些工作卻又無法寫進文章,否則顯得太過瑣碎和龐雜。

現(xiàn)在這個刷機包雖然得到這么多用戶的喜歡,但我知道遠沒有達到完美,比如:安裝 Win10 時對異常情況的提示和處理還很不完善,存在很多個例情況不能自動處理,初次使用者容易感到困惑,等等。限于精力,只能以后有時間再慢慢完善了。有愿意進一步了解的朋友歡迎加我微信探討。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,702評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,143評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,553評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,620評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,416評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,940評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,024評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,170評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,709評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,597評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,784評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,291評論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,029評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,407評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,663評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,403評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,746評論 2 370

推薦閱讀更多精彩內(nèi)容