在使用 UEFI 介面的 Samsung 筆電上執行 Linux 會導致無法開機
絕大部分的電腦在出貨時預設搭載的作業系統都不是 Linux,不過使用者若嘗試自行安裝並執行 Linux 通常也不會對硬體造成什麼嚴重影響,頂多就是硬體不支援、無法執行而已。然而就在大約半年前,一名 Ubuntu 的使用者回報說他在一台 Samsung 的筆電上使用 UEFI 介面去啟動 Ubuntu 12.04 就造成當機、以及更嚴重的……強制關機後就再也開不了機(電源按鈕無反應)。
一開始他大概以為只是純粹衰到,便在保固期內送回原廠維修、更換主機板後拿回來再試一次,結果筆電又陣亡了,還是一模一樣的死法。這下他明白事有蹊蹺,於是在 Launchpad 上提報出來,竟然有為數不少的使用者也接著反應相同的狀況:
https://bugs.launchpad.net/ubuntu-cdimage/+bug/1040557/
在看著這些問題回報時,DR 一方面驚訝原來 Samsung 的筆電銷路那麼好……另一方面也驚訝於怎麼那麼剛好有不少的 Samsung 筆電的使用者都想要裝 Ubuntu……總而言之,就在幾天前隨著 Linux kernel 終於加入對應此問題的 patch 後,The H 網站也為整起事件撰寫了兩篇較完整的報導:
- Booting Linux using UEFI can brick Samsung laptops
- Protection against Samsung UEFI bug merged into Linux kernel
由於 Samsung 的筆電有部份控制設定並不經過 ACPI,所以 Samsung 在幾年前便將針對自家筆電的驅動程式提供給 Linux kernel 整合。雖然 Samsung 方面認為驅動程式沒有問題,但經過測試與驗證後,Linux kernel 的開發人員還是將問題的矛頭指向這支針對 Samsung 筆電的驅動程式。除此之外,也有開發人員發現 Samsung 筆電的韌體並不完全符合 UEFI 規範。
事態算是有點嚴重(弄掛不少人的筆電),並且 Samsung 對於韌體的更新也尚未提出時間表,因此最新的 Linux kernel 將在偵測到 UEFI 的情況下停用該驅動程式。這些消息並沒有特別說明停用該驅動程式會對於 Linux 在 Samsung 筆電的運作有哪些影響,但最至少造成筆電陣亡的情形將不會再發生。
雖然主要的問題回報是發生在 Ubuntu,但其它 Linux 發行版理當也會有類似的狀況,所以這些 Linux 發行版的 kernel 維護人員可能也會需要跟進加入相關的 patch。
話說回來,其實這也不是 Linux 第一次把硬體搞爆,當年的 e1000e 模組 bug 也讓不少人的 Intel 網卡死得不明不白……
02/14/2013 更新:
由 Matthew Garrett 所發表的 Samsung laptop bug is not Linux specific 一文中表示該問題並不限於 Linux,作者用自己編寫的程式碼在 Windows 上測試,也同樣可以造成筆電陣亡。該問題終究來說是韌體的 bug,因為 Samsung 筆電能夠使用的 UEFI 變數儲存空間低於 UEFI 標準規範,所以才會在寫入後造成錯誤而無法開機。
Linux kernel 的 patch 僅避免了最容易觸發錯誤的一種途徑,作者建議在 Samsung 筆電上無論是使用哪種作業系統,目前最保險的作法是停用 UEFI。