Linus 没空实现的功能,开发者做到了:苹果 M1 Mac 成功运行原生 Linux!-四博互联_广州恒卓信息科技有限公司

Linus 没空实现的功能,开发者做到了:苹果 M1 Mac 成功运行原生 Linux!

在搭载 M1 芯片的苹果设备上运行 Linux 究竟有多难?
一年前,苹果震撼发布专为 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 加速。

苹果 M1 上的原生 Linux 越来越近!根据 Asahi Linux 最新发布的 9 月份进度报告显示,最底层的驱动程序已经并入了 Linux 内核,当前已经并入 5.16 版本的 Linux 内核覆盖了更多的驱动程序,包括 PCle bindings、PCle 驱动、USB-C PD 驱动。另外,还有 Pinctrl 驱动(苹果 GPIO 引脚控制)、I2C 驱动、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)。

这意味在没有官方文档解析、所属的硬件平台是苹果公司专有的情况下,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 说道