Fuchsia入门-简介和代码介绍

张开发
2026/6/29 9:47:57 15 分钟阅读
Fuchsia入门-简介和代码介绍
Fuchsia操作系统号称谷歌的“**三儿子**”前两个是**Android**和**Chrome OS**。Android和Chrome OS的内核都是**Linux**不同的是Chrome OS是针对PC的核心功能基于**Chrome浏览器**一切都在浏览器中使用数据都在云上更适合上网笔记本的使用一个大的弊端是没有桌面程序这还怎么用Android大家都知道针对的是**移动设备**最常见的手机就是。但是安卓有很多技术弊端例如**内存碎片化、安全性、HAL层鸡肋、对硬件渲染**支持等缺点后续会进行说明。所以需要一个**新的OS**。随着各种设备例如手机、平板、PC、物联网设备等各种智能设备的普及谷歌就想做一个**统一的OS**而且要脱离Linux的魔爪在2016年 8 Fuchsia正式推出Fuchsia的说明是“**Pink**粉红**Purple**紫色**Fuchsia**。它不再基于 Linux 内核而是基于名为 **Zircon** 的微内核并且是一个开源的**实时操作系统**并使用 **Dart** 和 **Flutter** 打造全新的 UI。这下可炸锅了大家一看谷歌还能这么玩各个头部公司就纷纷入局。更多了解参考Fuchsia中文社区https://fuchsia-china.com/鸿蒙 Harmony OS与Fuchsia OSFuchsia在**2016**年就开始起步了但是几年没有一个对外的版本华为的**Harmoney OS**虽然在2019 年8 月华为开发者大会正式发布但是进展神速。在手机还有各种家用电器物联网领域Harmoney OS的装机量据说明年就要突破**10亿**台了。谷歌可以说“**起了个大早赶了个晚集**”一方面有自家的安卓改革的动力不足。另一方面是不是因为“互联网基因”但是安卓系统都也维护的好好的技术应该也没问题底层技术应该也很有功底也可能是“**目标太宏大什么都想支持**”所以有点**难产**换句话说就是先进的思想太多了啥都想要最后非常多的代码搞的沉重难行。 不得不说Fuchsia真是个好东西里面有很多**先进的技术**值得去分析和学习但是谷歌就这么开源了可能就是现在的新玩法**不怕别人抄**重要的获得市场让更多的设备**用起来**相对于竞争者更多的是愿意不付钱合作的客户。只要领先别人会一直在追赶但是超越不了真是这么霸气。回想下当年安卓和塞班的斗争就是一个活生生的例子搅局者也许真能获得胜利。 2020 年谷歌再次推动宣传Fuchsia开始**二次发育**希望通过**平台开放**为其吸引更多软件开发支持者。2021 年初先是项目的 F1 分支之后又有 F3 分支随着一个个重要代码开发步骤的落地Fuchsia 的面貌及发展方向也开始愈发清晰。具体其**官网文档**介绍网址http://fuchsia.dev/虽然华为目前鸿蒙的装机量和技术发展的很好但是谷歌老大的地位还是不可撼动**摇旗一呼**小弟们就乖乖的归位了目前**三星**、索尼、联发科、小米、华为、OPPO、ViVo、高通等公司已经在参与Fuchsia 项目。众所周知**华为**的风格一向比较霸道动不动就**世界第一遥遥领先**愿意合作的商家比较少怕被抢了饭碗。但是国家还是力挺华为鹿死谁手还是将来见分晓至少华为现在有跟谷歌刚的资格了。2. 挥泪抛弃LinuxLinux一直是开源软件的**领头羊**但是我们的世界还是由商业组成的没有利益就没有动力啊。Linux内核是基于**GPL协议**的GPL协议意味着对源码的任何修改与引用都**必须开源**Android底层采用的Linux 内核所以Android是开源的而硬件厂商给Android开发的**驱动**是不可能开源的. 当初Google为了解决这个问题找到了一个解决办法底层Linux内核做了修改但是把驱动程序放在了Linux内核上层跑而且特意搞了一个隔离层叫**HAL**即Hardware Abstraction Layer**硬件抽象层**所以Android 系统架构中的HAL层本质是为了规避 GPL 协议而生的这事在当时还蛮有争议的但是不得不说Google 的这种思路彻底解决了问题既保护了「不想开源」的硬件厂商的利益又解决了「软硬件兼容」既利用出色而现成的 Linux Kernel 又防止了被 Linux Kernel 传染上 **GPL 后遗症**。 单一的开源协议还是生命力不那么旺盛Fuchsia就采用了综合的开源协议(包括 **BSD、 MIT 和 Apache** 许可证) 任何人都可以在 Google 的公共 Git 仓库中查看和下载。所有的代码模块化其他厂商想开源就开源随意集成不用担心很多**法律**问题特别是进行代码修改后的OTA相关操作。3. Zircon微内核历史Fuchsia早期是一个**研究型**的项目感觉这点跟国内的不太一样应该是外国有钱的公司会搞一个**研究所**招一些高学历、行业内厉害的人物**随意发挥的搞研究**偶尔会有能商用的东西就可以了想想真是下血本搞创新啊。国内的大公司目前也开始这么搞了可以说是暂时养了一堆**高薪水的闲人**给他们**自由**来搞研究甚至能发论文就是成果。牛人就喜欢这类工作不是做产品出版本上线设备维护处理客户需求等低级劳动。 下面介绍一个牛人**Travis Geiselbrecht**其个人主页http://tkgeisel.com/网页翻译后如下感觉这也是一个老外的**传统**我见过一些教授会把自己的研究成果学习工作经历甚至旅游或者生活的照片都放到**个人主页**上然后就是个人爱好真是彰显的个性十足估计以后死了别人看这些资料也能了解他的一生。Little Kernel是Travis Geiselbrecht 写的一个针对 ARM的嵌入式开源操作系统https://github.com/littlekernel/lk 。另外他还搞过IOS等其他OS。然后介绍另外一个牛人**Brian Swetland**他是安卓初创团体的成员谷歌另外一个项目**Magenta** 是从 LK 出发提供多进程、安全空间等支持的针对大型机有很多 RAM接口丰富的内核。然后 LK for embedded Magenta 就算是 Fuchisa OS 系统了。4. Fuchsia与VR/AR技术领域对于Android和Chrome OS的技术短板Fuchsia当然是重点发力的地方有两个新的点就是**硬实时**和基于**物理硬件的渲染**结合起来有一个很适合的领域就是**VR/AR**Facebook都开始发力元宇宙了大家可以看一个电影《**头号玩家**》里面对虚拟现实的描述还是有那么会事。可见谷歌下的是一盘大棋。5. 多语言应用支持和模块化在编码领域为一种新的语言某个应用要“**重复造轮子**”几乎是不可能的例如用java写了一个应用再用C写一遍基本很难。目前市场上的**安卓**程序员用java做的安卓应用还需要在**IPone**上用object-c再写一遍还要在**网页**上再实现一遍还要在**小程序**上再实现一遍真是要了老命了。这个角度新的OS都是在抢应用就是要支撑**各种语言平台**的应用都可以在自己的OS上运行来增强自己的生命力。Fuchsia已经超越平台的角度站在了语言的角度来支撑应用了。 原生前端应用程序是在**Dart**/**Flutter**中开发的这将极大地促进从Android平台到Fuchsia的迁移。同时支撑**CCRustGo和Dart**等语言程序的应用。 Fuchsia被设计成一个完全**模块化**的系统允许其库和应用程序完全删除更新和添加而不会影响系统 。除了确保系统完整性之外这还使其更加安全例如可以使用简单的软件包轻松获得安全补丁更新而不会影响用户数据或其他应用程序。个语言优缺点详细参考https://blog.csdn.net/weixin_39658118/article/details/104530466?spm1001.2101.3001.6650.8utm_mediumdistribute.pc_relevant.none-task-blog-2%7Edefault%7EESLANDING%7Edefault-8-104530466-blog-84035260.pc_relevant_landingrelevantdepth_1-utm_sourcedistribute.pc_relevant.none-task-blog-2%7Edefault%7EESLANDING%7Edefault-8-104530466-blog-84035260.pc_relevant_landingrelevantutm_relevant_index96. 架构介绍本部分参考官网文档https://fuchsia.dev/fuchsia-src/get-started/sdk/learn/intro?hlen最小特权原则该系统的核心是 **Zircon**用于处理系统启动和引导的内核和库集合。所有其他系统组件都在用户空间中实现并**相互隔离**强化了最小特权原则。这包括设备驱动程序、文件系统、网络堆栈。 简而言之这要求在操作系统环境的**抽象层**中每个模块例如进程用户或应用程序只能访问其执行所需的**信息和资源**。模块化/包容性和可升级模块化意味着系统**与语言无关**。由于它被设计为可扩展的并允许集成用多种语言和运行时编写的软件因此您可以使用**CCRustGoPython或Dart / Flutter**进行开发。 可升级意味着Fuchsia软件包被设计为**独立更新**甚至是即时交付或Enphemery这意味着软件包被设计为解耦因此根据需要从设备随意**添加删除更新**并且系统始终保持最新状态。内核系统核心是**Zircon**它是具有一组库的内核用于管理系统的启动和引导。内核之外的所有**系统组件**都是在所谓的用户空间中实现的并且与系统的关键层完全隔离 - 正如我们已经在这里讨论的那样加强了最小特权的原则 - 所以即使是设备驱动程序也在用户空间中隔离。 Zircon带来了我们通过微内核了解的架构和许多概念。这种架构使Fuchsia能够尽可能地减少信任代码的数量从而限制**内存管理调度和IPC**进程间通信。因此我们遇到了一个可能的问题如果系统的整个核心与用户空间隔离我们如何开发需要信息甚至与系统“**对话**”的应用程序 我们的代码执行**交互**例如手动内存管理系统任务或进程IPC设备I / O等;我们可以使用系统调用。这些执行系统调用的进程由**VDSO**虚拟动态共享对象 — libzircon.so库执行该库读取生成的内核映像而不是直接读取内核中的文件。 用户空间进程通过访问系统调用**libzircon.so**\- 一个 虚拟动态共享对象(vDSO) 。Zircon vDSO 是一个 **ELF** 格式的共享库内核将其映射到每个新进程的地址空间。这个库被认为是“虚拟的”因为它直接由内核映像公开而不是从文件加载。Zircon 公开了三个用于运行代码的主要内核对象线程给定地址空间内的执行线程。进程在私有、隔离的地址空间中运行的一组可执行指令。作业一组相关的流程和作业。所有作业形成一个单根树。流程构成了系统功能的基础。每个进程都通过它持有的各种句柄被授予一组能力。Fuchsia 软件可能会也可能不会在单个进程的范围内运行。作业允许将由多个进程组成的“应用程序”作为单个实体进行控制。进程间通信Zircon通道是Fuchsia接口定义语言(**FIDL**)描述的服务级IPC 协议的基础 . FIDL协议是Fuchsia 程序使用的主要**IPC** 方法。 Zircon 包含以下用于进程间通信 (IPC) 的**内核对象**类型Event、Socket、Stream、Channel、FIFO在这些对象中**通道**特别适合协助启动新进程因为它们能够将句柄以及功能转移到另一个进程。 通道恰好有两个端点**句柄**每个句柄都由一个单独的进程拥有。只有所有者可以读取或写入消息但端点的所有权可以从一个进程转移到另一个进程。当句柄写入通道时它们将从发送进程中删除。当从通道中读取**带有句柄的消息**时会将句柄添加到接收进程。这里跟**seL4**很像基于**能力权限**的通信也是最小化权限原则的体现就是把需要的权限都定义出来不大片的赋予权限。组件管理器组件框架的核心是组件管理器。它负责**协调所有组件**实例的执行为它们提供功能并在组件之间建立中介连接。 组件可以**显式启动**例如从 URL或从对特定功能的请求中隐式启动。组件管理器执行必要的决议以确定是启动新组件还是将请求路由到现有实例。为了进行这种路由每个组件都必须声明它提供给系统的任何功能以及它使用的任何功能。组件通过**capabilities**获得访问更广泛系统的各个部分的权限。组件的组织7 代码下载编译运行参考官网说明https://fuchsia.dev/fuchsia-src/development?hlen官网说的很详细这里不展开说明了需要了自己查看。直接查看源代码的网址https://cs.opensource.google/fuchsia/fuchsia下载的代码目录zircon: 操作系统内核主体代码bootloader, 内核的进程内存管理内核对象arch相关代码; 以及运行在用户态的系统核心进程 系统调用和library都在这里garnet: 基础软件层的主体代码主要是属于garnet层的bin文件代码topaz应用层最关键的是dart,flutter的runtimesrc操作系统的基础代码模块应该来说很多属于garnet层这里有camera,网络connectivity,graphics,media,security, storagebuild基本上是gni文件构建需要的sdk构建sdk/ddk所需要的配置和脚本boards全部是gni文件和板子相关的编译配置tools本地pc机上运行的工具比如fidl的工具third_party从外部引入的库比如flatbuffers,go,dart,ssl,iperf,libpng,protobuf等等examples一些c/c/rust/go的是示例代码可以学习在fuchsia上怎么开发bootloader: Gigaboot引导加载程序。Gigaboot引导加载程序是一个针对Zircon的UEFI引导加载程序可以通过链接从iPXE、UEFI可访问的文件系统或本地磁盘分区加载图像。kernel内核主体部分进程调度内存管理 内核对象object等system运行在用户态的核心系统进程bootsvc,devmgr,svchost等这个后面细细的品一些基础的library ulib和基础的工具uappvdso偏底层的系统调用相关的fidl文件在vituralbox的ubuntu上运行fx qemu -N后记本篇涉及代码比较少也是Fuchsia这个系统太大了可以自己去**官网**上看资料很详细是一切资料的入口。后续会继续更新本系列大家搭建环境可以加我微信**thatway1989**备注**进群**。一块讨论搭环境、汽车软件、操作系统软件等知识。“啥都懂一点啥都不精通干啥都能干干啥啥不是专业入门劝退堪称程序员杂家”。后续会继续更新纯干货分析无广告不打赏欢迎转载欢迎评论交流“那路谈OS与SoC嵌入式软件”欢迎关注个人文章汇总https://thatway1989.github.io

更多文章