从零实现,手机操作系统(1) —— postmarketOS
从零实现,手机操作系统。第一步,是为手机安装一个 postmarketOS。这样的一个实践过程,有利于接下来的开发工作。通过 postmarketOS,能让我们理解:1)主线Linux;2)下游Linux(厂商Linux)。在大局观上理解编写手机操作系统需要攻克的难点。
这是 《从零实现,手机操作系统》系列文章的第二篇。
0. 目标
为 onePlus 6T 从零开发操作系统,第一步是:
- 为目标手机(onePlus 6T)安装 postmarketOS 操作系统。
- 理解 postmarketOS 的哲学与架构。
因为,postmarketOS 为我们提供了宝贵的参考资料,是我们的指路人。
1. 安装 postmarketOS
我的手机是 onePlus 6T(一加6T),OnePlus 6 (oneplus-enchilada) - postmarketOS Wiki
参考这篇 Wiki 即可为 onePlus6T 安装 postmarketOS 操作系统。
其他手机阅读 Devices - postmarketOS Wiki 找到适合你手机的 wiki 阅读即可。
实践完后,会理解 基础铺垫知识 —— 多级引导启动-CSDN博客 。
2. 什么是 postmarketOS?
首先,要明确 postmarketOS 不是什么。它不是一个带有不同主题的 Android AOSP 系统。
postmarketOS (pmOS) 是一个为手机、平板等移动设备定制的、真正的 GNU/Linux 发行版。
可以把它想象成是安装在手机上的 Ubuntu、Arch Linux 或 Fedora。它不仅仅是像 Android AOSP 那样“使用”了 Linux 内核,而是从内核到用户空间,都遵循桌面级 Linux 发行版的开放、自由和可持续的理念。
它的核心使命是:通过使用主线 Linux 内核,为设备提供长达 10 年以上的生命周期,彻底摆脱制造商通常在 2-3 年后就停止更新的“计划性淘汰”困境。
3. 核心问题:为什么 postmarketOS 很重要 ?
要理解 pmOS 的价值,必须先理解它试图解决的问题——下游内核 (Downstream Kernel),也就是我们常说的“厂商内核”或“魔改内核”。
3.1. 上游与下游的概念
-
上游内核 (Mainline Kernel):指由 Linus Torvalds 及全球核心开发者社区维护的,在官方网站 kernel.org 发布的主线 Linux 内核。这是最权威、最纯净的内核源代码,代表了 Linux 发展的最前沿,具有最高的代码质量、安全性和通用性。
-
下游内核 (Downstream Kernel):这是一个基于上游内核的 fork 版本。硬件制造商(如高通、三星)或手机厂商(如小米、一加)会从上游选择一个特定的内核版本(通常是长期支持版 LTS)作为起点,然后为了让其特定硬件能够工作,在上面添加了大量的、非标准的、专有的代码。这个过程就像从一条主河流(上游)引出一条支流(下游),就是 copy 然后再 copy 后的代码缝缝补补。
3.2. 下游内核的问题
下游内核(厂商内核)虽然让手机得以快速上市,但它也带来了严重的长期问题,这正是 pmOS 要解决的核心矛盾:
-
技术债务与严重分歧:厂商为了赶工期进度,会加入大量不符合主线编码规范的板级支持包 (BSP) 和树外驱动 (Out-of-Tree Drivers)。随着时间的推移,这条“支流”与“主河道”的分歧越来越大,使得将内核升级到一个新的主线版本变得极其困难,甚至不可能。
-
安全更新延迟与缺失:当主线内核发布安全补丁时,厂商需要投入大量精力进行“向后移植 (Backporting)”,即把新补丁应用到他们那个陈旧且经过大量修改的内核上。这个过程成本高昂且容易出错,导致厂商往往只会选择性地移植关键补丁,或者在设备发布一两年后完全停止更新,使手机暴露在已知的安全风险之下。
-
软件碎片化:每一款设备,甚至同一型号的不同批次,都可能运行着一个独一无二的下游内核。这使得开发通用的第三方操作系统(如我们的的 Rust OS)变得异常困难。
-
计划性淘汰:这是最直接的用户痛点。一旦厂商停止为其下游内核提供更新,这台设备的软件生命周期就走到了尽头,无论其硬件性能多么强大。
4. 核心解决方案:主线化与逆向工程
为了摆脱对下游内核的依赖,postmarketOS 社区必须进行艰苦卓绝的逆向工程,以实现主线化——即让设备能在纯净、可持续更新的主线 Linux 内核上运行。
这正是 pmOS 项目的主要工作,也是其与普通桌面 Linux 发行版最大的区别。这个过程大致如下:
-
第一步:从已知线索开始
根据 GPLv2 许可证的著佐权条款,任何修改并分发 Linux 内核的实体,都必须公开发布其修改后的源代码。这为 pmOS 社区提供了法律依据,让他们能获取到手机厂商那个混乱但至关重要的下游内核源代码,作为逆向工程的起点。 -
第二步:逐个击破硬件组件
开发者将手机视为一系列独立组件的集合(SoC, GPU, 显示面板, 触摸控制器, WiFi/蓝牙芯片, 音频编解码器, 摄像头等),然后为每一个组件编写符合主线标准的、干净的驱动程序,以替代厂商的私有驱动。 -
第三步:逆向工程的核心技术
这是一个充满挑战的过程,需要综合运用多种技术:-
分析设备树 (Device Tree):现代 ARM Linux 系统使用设备树(.dts, .dtsi 文件)来描述硬件布局。分析厂商内核中的设备树,可以得知哪个硬件连接在哪个总线上、使用了哪个中断等关键信息。
-
分析硬件寄存器:通过在原始 Android 系统上运行工具,开发者可以“监听”系统对硬件寄存器(控制硬件行为的特殊内存地址)的读写操作,从而推断出初始化屏幕、启动 WiFi 等操作所需的指令序列。
-
寻找数据手册 (Datasheets):芯片制造商(如高通)的数据手册是逆向工程的“金矿”,它详细说明了如何通过编程控制芯片。
-
参考相似设备:如果另一款已获得良好主线支持的手机使用了相同或相似的芯片,开发者就可以此为基础进行修改适配。
-
大量的试错:这是最常见的方法。开发者编写一小段代码去“戳一戳”某个硬件寄存器,然后观察手机的反应(如屏幕是否微亮),就像在黑暗中摸索开关。
-
-
一个具体的例子:手机通话功能
手机的调制解调器 (Modem,负责拨打电话、短信、4/5G上网) 是一个典型的“黑盒子”,运行着自己的专有实时操作系统。Android AOSP 通过厂商的闭源驱动库与它通信。postmarketOS 社区则通过逆向工程,弄清楚了 Linux 内核与 Modem 之间的通信协议(如高通的 QMI),然后编写了符合主线标准的驱动(如 qrtr 和 rmnet),让 Linux 内核能通过这些开放协议命令 Modem 去打电话、发短信。
主线化的回报是巨大的:一旦一个设备的驱动被成功主线化,它就获得了“永生”,可以跟随主线 Linux 内核一起更新,理论上可以获得超过 10 年的支持。
5. 架构分解:postmarketOS 的构成
理解了其哲学后,我们来看它的具体技术架构:
-
底层:主线 Linux 内核 (The Linux Kernel)
这是 pmOS 的基石。项目始终致力于使用最新的、最纯净的官方主线内核或长期支持(LTS)内核。 -
中层:Alpine Linux 用户空间
pmOS 的基础系统(用户空间)构建于 Alpine Linux 之上。选择 Alpine 的原因是:-
轻量:使用 musl 作为 C 标准库,BusyBox 提供核心工具集,使得基础系统非常小巧,适合资源有限的移动设备。
-
简洁与安全:Alpine 以其简洁的设计和对安全的重视而闻名,非常适合低功耗的移动设备。
-
强大的包管理:使用 apk 作为其包管理器。
-
-
上层:自由选择的用户界面 (UI)
就像在桌面 Linux 上可以选择 GNOME, KDE, XFCE 一样,pmOS 提供了多种为触摸屏优化的 UI,用户可以自由选择安装:-
Phosh (Phone Shell): 基于 GNOME 技术,由 Purism 为其 Librem 5 手机开发,体验稳定。
-
Plasma Mobile: 基于 KDE Plasma 技术,提供了丰富的桌面/移动融合体验。
-
Sxmo (Simple X Mobile): 极简主义界面,以窗口管理器 (dwm) 为核心,主要通过手势和物理按键操作,深受高级用户和极客喜爱。
-
此外,还有 GNOME Shell、Sway 等多种选择。
-
6. 对比总结:postmarketOS 与 Android 的本质区别
虽然都使用 Linux 内核,但二者在理念和实践上截然不同。
特性/方面 | postmarketOS | Android |
内核 (Kernel) | 致力于使用主线 Linux 内核,追求长期、统一的更新与安全。 | 使用基于旧版 LTS 的下游内核,由厂商深度魔改,更新滞后且碎片化。 |
用户空间 | 一个完整的 GNU/Linux 系统 (基于 Alpine),拥有标准的 Linux 工具链和文件系统。 | 一个高度定制化的 Java 运行时环境,底层工具和库与标准 Linux 差异巨大。 |
用户界面 (UI) | 可自由选择 (Phosh, Plasma 等),如同桌面 Linux。 | 单一且高度集成,由手机厂商定制(如 MIUI, One UI)。 |
软件生态 | 直接运行为标准 Linux 编译的软件,生态与桌面 Linux 互通。 | 运行为 Android Runtime (ART) 设计的 App (APK格式),与桌面 Linux 不兼容。 |
更新模式 | 滚动更新或定期发布,由 pmOS 社区统一提供,只要主线内核支持硬件就能持续更新。 | 依赖于厂商,通常在 2-3 年后停止提供系统和安全更新。 |
核心哲学 | 可持续性、开放、自由,让用户真正拥有和控制自己的设备。 | 商业驱动、快速迭代,为销售新硬件服务,生态相对封闭。 |
结论与下一步
对于我们而言,postmarketOS 不仅仅是一个可以安装的系统,更是一个宝贵的资源库和学习平台:
1. 实践平台:可以为我手上的高通骁龙设备(如onePlus 6T)寻找 pmOS 的移植或适配分支,亲自体验主线内核在移动设备上的运行情况。
2. 代码宝库:pmOS 社区为各种硬件编写的驱动和设备树文件都是公开的。这些是学习如何用符合主线标准的方式控制移动设备硬件的最佳参考代码。
3. 知识社区:pmOS 的 Wiki 和社区论坛(如 Matrix/IRC 频道)汇集了全球顶尖的移动设备黑客和底层开发者。当我们遇到具体硬件(如 onePlus 6T 的屏幕控制器、摄像头)的驱动问题时,这里是寻求帮助和交流思想的地方。
我们的 Rust 编写的操作系统项目,是一个宏大的目标。而 postmarketOS 的工作,正是我们最宝贵的参考资料。通过研究它,我们将学到如何攻克移动设备硬件的“黑盒”——即如何通过逆向工程,摆脱厂商的“魔改”内核,并为主线 Linux 编写驱动。这些知识将指导我们,定制自己的开发路线图:从最基础的启动(Bootloader),到初始化关键硬件,最终成功运行自己的 Rust 编写的内核。
更多推荐
所有评论(0)