選單

Linus 沒空實現的功能,開發者做到了:蘋果 M1 Mac 成功執行原生 Linux!

在搭載 M1 晶片的蘋果裝置上執行 Linux 究竟有多難?

作者 | 蘇宓

出品 | CSDN(ID:CSDNnews)

一年前,蘋果震撼釋出專為 Mac 設計的首款 Soc 晶片——M1,為自家的軟硬體生態閉環奠定了堅固的基礎,而這一突破性創新也於一時之間引得無數開發者競折腰。

不過,對於蘋果從硬體、到軟體、再到系統這種將整個生態鏈握在自家手中的封閉做法,也有不少人認為蘋果應該再開放一些,以融合更多的生態。對此,當“如何看待配備 M1 的 MacBook Air”這一問題落到 Linux 之父 Linus Torvalds 手中時,其曾回答道:

非常樂意去擁有一臺,因為自己也曾是 11 英寸 MacBook Air 的長達十年使用者,但是現在蘋果筆記本對 Linux 相容已經不那麼友好了,儘管新的 MacBook Air 幾乎完美無瑕,但 OS 不行。

雖然他等待搭載 ARM 架構的膝上型電腦執行 Linux 已許久,但是因為時間、精力等因素,Linus 直言沒空解決 M1 Mac 執行 Linux 的問題,且也不想與對 Linux 不感興趣的蘋果公司“作對”。

由於 M1 Mac 採用了蘋果自研的 GPU 以及相關裝置,因此想要在該裝置上執行 Linux,就必須針對 Linux Kernel 重寫底層支援,這種情況下如果有蘋果的開放支援或許一切都變得簡單,但當前如果也僅是如果,現實想要在 Mac 上執行 Linux,的確很難。不過,即使有一點希望,有開發者也表示願意一試。

Asahi Linux

(https://asahilinux。org/)就是這樣的一個專案,它是由知名開發者 Hector Martin 發起,透過眾籌的支援,這個專案已經持續了近一年的時間。

近期,該專案再次傳來一個好訊息——

Linux 現在可以在 M1 Mac 上實現“作為基本桌面”的功能,不過還沒有 GPU 加速

Linus 沒空實現的功能,開發者做到了:蘋果 M1 Mac 成功執行原生 Linux!

蘋果 M1 上的原生 Linux 越來越近!

根據Asahi Linux 最新發布的 9 月份進度報告顯示,最底層的驅動程式已經併入了 Linux 核心,當前已經併入 5。16 版本的 Linux 核心覆蓋了更多的驅動程式,包括 PCle bindings、PCle 驅動、USB-C PD 驅動。另外,還有 Pinctrl 驅動(蘋果 GPIO 引腳控制)、I²C 驅動、ASC mailbox driver、IOMMU 4K patches、裝置電源管理等部件還在稽核中。

“有了這些驅動程式,M1 Mac 實際上可以用作桌面 Linux 機器!雖然還沒有 GPU 加速,但 M1 的 CPU 非常強大,以至於在它們上的軟體渲染桌面實際上比在具有硬體加速的 Rockchip ARM64 機器上更快。“Asahi Linux的專案負責人 Hector Martin說道。

除此之外,在研究過程中,Asahi Linux 專案團隊發現

蘋果自研的 Soc 與其他 Soc 有著很大的不同

,其表示,“在典型的 SoC 上,驅動程式對底層硬體有深入的瞭解,並且他們對其精確的佈局進行硬編碼:多少暫存器、多少引腳、事物如何相互關聯等等。這實際上是大多數 SoC 的要求,因為硬體往往會因代而異,因此驅動程式總是需要更改以支援更新的硬體。

然而,Apple 在強調保持硬體介面在 SoC 各代之間相容方面是獨一無二的——M1 中的 UART

Universal Asynchronous Receiver/Transmitter,通用非同步收發傳輸器

硬體可以追溯到最初的 iPhone!這意味著我們處於一個獨特的位置,

可以嘗試編寫不僅適用於 M1,而且可以在未來的晶片上保持不變的驅動程式。

這是 ARM64 世界中一個非常令人興奮的機會。“

為什麼將 Linux 移植到 M1 Mac 這麼難?

如今,Asahi Linux 可以在 M1 Mac 上作為一個基本的 Linux 桌面使用,已是一次不小的突破。

據外媒報道,一家專門從事虛擬化解決方案的初創軟體公司 Corellium 曾嘗試將 Linux 移植到基於 M1 的 PC 過程中發現,蘋果公司在構建 M1 時不走尋常路,運用了大量的專有技術。

舉例說明,當幾乎所有基於 64 位 Arm 的系統啟動時,它們都透過稱為 PSCI 的介面呼叫韌體,但在 M1 的情況下,CPU 核心從 MMIO 暫存器指定的地址開始,然後開始執行核心。此外,蘋果系統還使用與 Arm 標準不相容的專有 Apple 中斷控制器 (AIC)。同時,定時器中斷連線到 FIQ,這是一個晦澀的架構特性,主要用於與 Linux 不相容的 32 位 Arm 系統。

為了使 M1 驅動的 PC 中的各種處理器相互互動,作業系統必須提供一組處理器間中斷 (Inter-Processor Interrupt,IPI)。以前,IPI 的處理方式與使用 MMIO 訪問 AIC 的傳統 IRQ 一樣,但在 M1 的情況下,蘋果公司使用處理器核心暫存器來排程和確認 IPI,因為它們依賴於 FIQ。

Apple 的奇特之處還不止於此。例如,蘋果公司的 Wi-Fi/藍芽控制器使用基於 PCIe 的非標準協議連線到 SoC。更復雜的是,蘋果的 PCIe 和整合的 Synopsys DWC3 USB 控制器使用該公司專有的輸入-輸出記憶體管理單元 (IOMMU),稱為裝置地址解析表 (DART)。

Linus 沒空實現的功能,開發者做到了:蘋果 M1 Mac 成功執行原生 Linux!

這意味在沒有官方文件解析、所屬的硬體平臺是蘋果公司專有的情況下,Asahi Linux 專案的工程師們想要看透 M1 晶片蘊藏的奧秘,必須進行大量的逆向工程以及不斷的探索工作,其工作量與難度也非常人想象。

不過,這是否意味著該專案已經成功,該團隊表示,“仍需要等待下一代晶片如 M1X/M2 晶片的釋出,以確保他們是否成功製作了足夠的驅動程式向前相容以在較新的晶片上啟動 Linux。”

下一征程——GPU

當前 Asahi Linux 雖然實現了不小的突破,但該團隊也指出,因為缺少驅動程式和完美的設定,當前的 Asahi Linux仍然無法使用 Thunderbolt、網路攝像頭、音訊,Wi-Fi 支援也還需要大量的工作。

除此之外,更為關鍵的是,GPU 加速也是一個大問題,由於蘋果的專有性,它需要獨立開發者們構建類似於蘋果自己設計的驅動程式。同時,也有一些程式在 M1 SoC 中使用了蘋果專有的硬體單元(GPU、影片加速等),如果沒有合適的驅動程式,這些應用將無法在 Linux 下感知到蘋果處理器帶來的優勢。

截止目前,Asahi Linux 專案仍然還沒有合適的安裝程式,除了社群之外的使用者無法在基於 Apple Silicon 的系統上體驗原生 Linux,但他們也將 GPU 作為下一個重點突破口。

“一旦我們有了穩定的核心基礎,我們將開始釋出一個‘官方’安裝程式,希望能在‘冒險者’中看到更廣泛的使用。”Hector Martin 說道。

參考:

https://asahilinux。org/2021/10/progress-report-september-2021/

https://www。tomshardware。com/news/apple-m1-linux-reveals-system-architecture