linus没空实现的功能,开发者做到了:苹果m1mac成功运行原生linux!

苏小宓 苏小宓     2023-01-12     651

关键词:

在搭载 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 引脚控制)、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)。

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

代码质量第5层-只是实现了功能

 产品实现的功能是产品价值的体现形式。功能实现是基础。功能没有实现,其他方面做得再好也没有意义。那么,如何保证实现的功能覆盖了需求呢?产品实现的功能是产品价值的体现形式。功能实现是基础。功能... 查看详情

代码质量第5层-只是实现了功能

...为您解读云时代热点技术,探秘行业发展新机。产品实现的功能是产品价值的体现形式。功能实现是基础。功能没有实现,其他方面做得再好也没有意义。那么,如何保证实现的功能覆盖了需求呢?本文主要内容... 查看详情

githook开发实践总结(代码片段)

...本文将简要介绍其hook的功能,并通过一个特定的hook实现来展示如何来开发hook。1GitHookgit在提供了一些列版本功能的功能之外,还提供了若干的扩展机制,由开发团队在其扩展点 查看详情

windows系统多桌面切换的鼠标实现(代码片段)

我作为一个开发者正常在日常的工作环境中大多是使用MacOS系统进行开发。也经常会接触到windows系统。我认为,苹果操作系统在使用体验方面非常人性化,比如提供了很多方便的快捷键和快捷指令。对于我来说,最喜欢的功能就... 查看详情

苹果手机在微信内打开app下载链接时怎么做到直接微信内下载

...原因很简单了,就是被微信拦截了。这个问题我们只需要实现从微信内直接跳出到外部浏览器打开网页链接即可,下面给大家介绍这个功能地实现方法。功能目的生成微信跳转链接,实现微信内置浏览器跳转外部浏览器打开网页... 查看详情

什么是linus?

...计算机高手投入开发、改善Linux的核心程序,使得Linux的功能日见强大,所以今日我们可以在网络上免费下载Linux使用,或者花很少的一点费用就可以取得Linux光盘,这都是因为Linux是GPL版权的缘故。除了核心程序以外,一个操作... 查看详情

oraclearchivelog导致磁盘没空间了怎么办

OracleArchivelog导致磁盘没空间了一般是要删除部分归档日志以留出更多的空间。一、采用以下这种方法删除归档日志:1.进入rman2.connecttarget/3.crosscheckarchivelogall;4.deleteexpiredarchivelogall;这时候再去OEM中看就一定看不到,如果从来没有... 查看详情

第一次迭代开发心得

...?)?原计划功能:注册登录功能,工单处理,报警信息处理实现情况:注册登录功能基本完成,工单和报警的后台未完成模块的集成出 查看详情

休假结束,linus重回内核开发岗位

...usTorvalds将与内核维护者们碰头,这是他重新接管Linux内核开发的第一步。一个多月前,Torvalds在一份关于Linux内核邮件列表(LKML)的说明中对自己过去的行为表示反悔,对因为他的言行而受到伤害的人表示道歉,他表示需要离开... 查看详情

第一次迭代开发心得

...付时间交付了么?原计划达到的用户数量达到了么?)?实现情况:首页登录、设备管理、账户管理模块实现;交付:系统核心功能(设备管理)实现,暂未投入使用;1.3用户量,用户对重要功能的接受程度和我们事先的预想一... 查看详情

linus坚守30年,改变了世界!

...alds发布了一份简短的说明,介绍自己正出于业余爱好开发一款操作系统——Linux。如今,30年过去了,Linux已经成为软件开发历史上的 查看详情

第13课《科普文》

...—git。我们在日常的项目中都会用到git,它使我们的项目开发能够有序地进行。在当时,全球各地的志愿者要想将源代码贡献给Linux系统只能通过diff的方式发给Linus,然后由Linus本认通过手工方式对代码进行合并。但是这种方法... 查看详情

上传ipa到appstore的步骤说明

...原生的iosapp的时候,有苹果电脑在手,上传ipa文件到苹果开发者中心比较简单,直接在xcode上就可以实现了。但是现在大多数人开发app不再是用原生框架开发了,也没有苹果电脑。很多朋友们选择了跨平台的H5技术来开发app,真... 查看详情

linus:这真的很烦人!(代码片段)

...f0c;他在邮件中除了介绍新版本的变化外,还呼吁内核开发者不要在合并窗口关闭前的最后期限才提交补丁,因为“在最后几天收到大量PR真的很烦人”。一般来说,在一个内核版本发布之后,下一个版本会经历为... 查看详情

ios实现苹果第三方登录功能-signinwithapple

...项目设置->Signing&Capabilities里,开启SigninwithApple选项。实现分四大部分:在上面ASAuthorizationControllerDelegate的用户通过验证的回调里,可以拿到credential,这里面有一些信息值得提下:授权或者用户信息是有可能被改变的,我们能... 查看详情

linus吐槽桌面版linux

...行版Linux桌面的程序兼容性问题,以及这个问题会给开发者和普通用户带来多糟糕的体验。在会议上,LinusTorvalds指出Linux分裂的一个重要原因:他一向要求各版本的Linux尽量不要更改核心,不能破坏用户空间,... 查看详情

版本控制系统git介绍与部署

...何或小或大的项目。Git是LinusTorvalds为了帮助管理Linux内核开发而开发的一个开放源代码的版本控制软件。Git与常用的版本控制工具CVS、Subversion等不同,它采用了分布式版本库的方式,不必服务器端软件支持。二、Git的诞生Linus在... 查看详情

六石编程学:不论是哪个功能,你觉得再没用,会用的人都离不了,所以至少要做到99%

  作为一个OFFICE软件开发者,经常听到一些谬论,诸如:很多功能没用,80%用户使用了20%功能,90%用户使用了10%功能。  这听起来很有道理,实际上呢?很有欺骗性。在永中时期,吾就驳斥了这种谬论:不同用户使用的功能... 查看详情