0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Fuchsia入门-简介和代码介绍

yzcdx 来源:OS与AUTOSAR研究 作者:OS与AUTOSAR研究 2022-11-28 10:27 次阅读

Fuchsia操作系统号称谷歌的“三儿子”,前两个是Android和Chrome OS。Android和Chrome OS的内核都是Linux,不同的是Chrome OS是针对PC的,核心功能基于Chrome浏览器,一切都在浏览器中使用,数据都在云上,更适合上网笔记本的使用,一个大的弊端是没有桌面程序,这还怎么用?Android大家都知道针对的是移动设备,最常见的手机就是。但是安卓有很多技术弊端,例如内存碎片化、安全性、HAL层鸡肋、对硬件渲染支持等缺点,后续会进行说明。所以需要一个新的OS。

7424aa74-6eb3-11ed-8abf-dac502259ad0.png

随着各种设备例如手机、平板、PC、物联网设备等各种智能设备的普及,谷歌就想做一个统一的OS,而且要脱离Linux的魔爪,在2016年 8 Fuchsia正式推出,Fuchsia的说明是“Pink(粉红)+Purple(紫色)=Fuchsia。它不再基于 Linux 内核,而是基于名为Zircon的微内核,并且是一个开源的实时操作系统,并使用Dart和Flutter打造全新的 UI。这下可炸锅了,大家一看谷歌还能这么玩,各个头部公司就纷纷入局。

更多了解参考Fuchsia中文社区:https://fuchsia-china.com/

鸿蒙 Harmony OS与Fuchsia OS

Fuchsia在2016年就开始起步了,但是几年没有一个对外的版本,华为的HarmoneyOS虽然在2019 年8 月华为开发者大会正式发布,但是进展神速。在手机还有各种家用电器物联网领域HarmoneyOS的装机量据说明年就要突破10亿台了。谷歌可以说“起了个大早,赶了个晚集”,一方面有自家的安卓,改革的动力不足。另一方面是不是因为“互联网基因”,但是安卓系统都也维护的好好的,技术应该也没问题,底层技术应该也很有功底,也可能是“目标太宏大,什么都想支持”所以有点难产,换句话说就是先进的思想太多了,啥都想要,最后非常多的代码搞的沉重难行。

不得不说Fuchsia真是个好东西,里面有很多先进的技术值得去分析和学习,但是谷歌就这么开源了,可能就是现在的新玩法:不怕别人抄,重要的获得市场,让更多的设备用起来,相对于竞争者,更多的是愿意不付钱合作的客户。只要领先,别人会一直在追赶但是超越不了,真是这么霸气。回想下当年安卓和塞班的斗争就是一个活生生的例子,搅局者也许真能获得胜利。

2020 年谷歌再次推动宣传,Fuchsia开始二次发育,希望通过平台开放为其吸引更多软件开发支持者。2021 年初,先是项目的 F1 分支,之后又有 F3 分支,随着一个个重要代码开发步骤的落地,Fuchsia 的面貌及发展方向也开始愈发清晰。具体其官网文档介绍网址:

虽然华为目前鸿蒙的装机量和技术发展的很好,但是谷歌老大的地位还是不可撼动,摇旗一呼,小弟们就乖乖的归位了,目前三星、索尼、联发科、小米、华为、OPPO、ViVo、高通等公司已经在参与Fuchsia 项目。众所周知,华为的风格一向比较霸道,动不动就世界第一,遥遥领先,愿意合作的商家比较少,怕被抢了饭碗。但是国家还是力挺华为,鹿死谁手,还是将来见分晓,至少:

华为现在有跟谷歌刚的资格了。

2. 挥泪抛弃Linux

Linux一直是开源软件的领头羊,但是我们的世界还是由商业组成的,没有利益就没有动力啊。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微内核历史

74de4fce-6eb3-11ed-8abf-dac502259ad0.png

Fuchsia早期是一个研究型的项目,感觉这点跟国内的不太一样,应该是外国有钱的公司会搞一个研究所,招一些高学历、行业内厉害的人物,随意发挥的搞研究,偶尔会有能商用的东西就可以了,想想真是下血本搞创新啊。国内的大公司目前也开始这么搞了,可以说是暂时养了一堆高薪水的闲人,给他们自由,来搞研究,甚至能发论文就是成果。牛人就喜欢这类工作,不是做产品,出版本,上线设备维护,处理客户需求等低级劳动。

下面介绍一个牛人TravisGeiselbrecht,其个人主页:http://tkgeisel.com/

网页翻译后,如下:

74fd3fe2-6eb3-11ed-8abf-dac502259ad0.png

感觉这也是一个老外的传统,我见过一些教授会把自己的研究成果,学习工作经历,甚至旅游或者生活的照片都放到个人主页上,然后就是个人爱好,真是彰显的个性十足,估计以后死了别人看这些资料也能了解他的一生。

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.多语言应用支持和模块化

7548c25a-6eb3-11ed-8abf-dac502259ad0.png

在编码领域,为一种新的语言,某个应用要“重复造轮子”几乎是不可能的,例如用java写了一个应用,再用C++写一遍,基本很难。目前市场上的安卓程序员用java做的安卓应用还需要在IPone上用object-c再写一遍,还要在网页上再实现一遍,还要在小程序上再实现一遍,真是要了老命了。这个角度新的OS都是在抢应用,就是要支撑各种语言平台的应用都可以在自己的OS上运行,来增强自己的生命力。Fuchsia已经超越平台的角度,站在了语言的角度来支撑应用了。

原生前端应用程序是在Dart/Flutter中开发的,这将极大地促进从Android平台到Fuchsia的迁移。同时支撑C,C++,Rust,Go和Dart等语言程序的应用。

Fuchsia,被设计成一个完全模块化的系统,允许其库和应用程序完全删除,更新和添加,而不会影响系统。除了确保系统完整性之外,这还使其更加安全,例如可以使用简单的软件包轻松获得安全补丁更新,而不会影响用户数据或其他应用程序。

个语言优缺点详细参考:

https://blog.csdn.net/weixin_39658118/article/details/104530466?spm=1001.2101.3001.6650.8&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EESLANDING%7Edefault-8-104530466-blog-84035260.pc_relevant_landingrelevant&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EESLANDING%7Edefault-8-104530466-blog-84035260.pc_relevant_landingrelevant&utm_relevant_index=9

6.架构介绍

756ac864-6eb3-11ed-8abf-dac502259ad0.png

本部分参考官网文档:

https://fuchsia.dev/fuchsia-src/get-started/sdk/learn/intro?hl=en

最小特权原则:

该系统的核心是Zircon,用于处理系统启动和引导的内核和库集合。所有其他系统组件都在用户空间中实现并相互隔离,强化了最小特权原则。这包括:设备驱动程序、文件系统、网络堆栈。

简而言之,这要求在操作系统环境的抽象层中,每个模块(例如进程,用户或应用程序)只能访问其执行所需的信息和资源。

模块化/包容性和可升级:

模块化意味着系统与语言无关。由于它被设计为可扩展的,并允许集成用多种语言和运行时编写的软件,因此您可以使用C,C++,Rust,Go,Python或Dart /Flutter进行开发。

可升级意味着Fuchsia软件包被设计为独立更新,甚至是即时交付,或Enphemery,这意味着软件包被设计为解耦,因此根据需要从设备随意添加删除更新,并且系统始终保持最新状态。

内核:

系统核心是Zircon,它是具有一组库的内核,用于管理系统的启动和引导。内核之外的所有系统组件都是在所谓的用户空间中实现的,并且与系统的关键层完全隔离 - 正如我们已经在这里讨论的那样,加强了最小特权的原则 - 所以即使是设备驱动程序也在用户空间中隔离。

Zircon带来了我们通过微内核了解的架构和许多概念。这种架构使Fuchsia能够尽可能地减少信任代码的数量,从而限制内存管理,调度和IPC(进程间通信)。

75932b88-6eb3-11ed-8abf-dac502259ad0.png

因此,我们遇到了一个可能的问题:如果系统的整个核心与用户空间隔离,我们如何开发需要信息甚至与系统“对话”的应用程序?

我们的代码执行交互,例如:手动内存管理,系统任务或进程,IPC,设备I / O等;我们可以使用系统调用。这些执行系统调用的进程由VDSO(虚拟动态共享对象 — libzircon.so)库执行,该库读取生成的内核映像,而不是直接读取内核中的文件。

用户空间进程通过访问系统调用libzircon.so- 一个虚拟动态共享对象(vDSO)。Zircon vDSO 是一个ELF格式的共享库,内核将其映射到每个新进程的地址空间。这个库被认为是“虚拟的”,因为它直接由内核映像公开,而不是从文件加载。

Zircon 公开了三个用于运行代码的主要内核对象:

线程:给定地址空间内的执行线程。

进程:在私有、隔离的地址空间中运行的一组可执行指令。

作业:一组相关的流程和作业。所有作业形成一个单根树。

流程构成了系统功能的基础。每个进程都通过它持有的各种句柄被授予一组能力。

Fuchsia 软件可能会也可能不会在单个进程的范围内运行。作业允许将由多个进程组成的“应用程序”作为单个实体进行控制。

75ab634c-6eb3-11ed-8abf-dac502259ad0.png

进程间通信:

Zircon通道是Fuchsia接口定义语言(FIDL)描述的服务级IPC 协议的基础 . FIDL协议是Fuchsia 程序使用的主要IPC方法。

Zircon 包含以下用于进程间通信 (IPC) 的内核对象类型:Event、Socket、Stream、Channel、FIFO,在这些对象中,通道特别适合协助启动新进程,因为它们能够将句柄(以及功能)转移到另一个进程。

通道恰好有两个端点句柄,每个句柄都由一个单独的进程拥有。只有所有者可以读取或写入消息,但端点的所有权可以从一个进程转移到另一个进程。当句柄写入通道时,它们将从发送进程中删除。当从通道中读取带有句柄的消息时,会将句柄添加到接收进程。

75c78194-6eb3-11ed-8abf-dac502259ad0.png

这里跟seL4很像,基于能力权限的通信,也是最小化权限原则的体现,就是把需要的权限都定义出来,不大片的赋予权限。

组件管理器:

组件框架的核心是组件管理器。它负责协调所有组件实例的执行,为它们提供功能,并在组件之间建立中介连接。

组件可以显式启动(例如,从 URL)或从对特定功能的请求中隐式启动。组件管理器执行必要的决议以确定是启动新组件还是将请求路由到现有实例。为了进行这种路由,每个组件都必须声明它提供给系统的任何功能以及它使用的任何功能。组件通过capabilities获得访问更广泛系统的各个部分的权限。

组件的组织:

75e8103a-6eb3-11ed-8abf-dac502259ad0.png

7. 代码下载编译运行

参考官网说明:

https://fuchsia.dev/fuchsia-src/development?hl=en

官网说的很详细,这里不展开说明了,需要了自己查看。

直接查看源代码的网址:

https://cs.opensource.google/fuchsia/fuchsia

下载的代码目录:

75fca5cc-6eb3-11ed-8abf-dac502259ad0.png

zircon: 操作系统内核主体代码,bootloader, 内核的进程,内存管理,内核对象,arch相关代码; 以及运行在用户态的系统核心进程,系统调用和library都在这里

garnet: 基础软件层的主体代码,主要是属于garnet层的bin文件代码,

topaz:应用层,最关键的是dart,flutter的runtime

src:操作系统的基础代码模块,应该来说很多属于garnet层,这里有camera,网络connectivity,graphics,media,security, storage

build基本上是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和基础的工具uapp

vdso偏底层的系统调用相关的fidl文件

在vituralbox的ubuntu上运行:fx qemu -N

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 操作系统
    +关注

    关注

    37

    文章

    6295

    浏览量

    121927
  • 代码
    +关注

    关注

    30

    文章

    4558

    浏览量

    66894
  • 智能设备
    +关注

    关注

    5

    文章

    971

    浏览量

    46951

原文标题:Fuchsia入门-简介和代码介绍

文章出处:【微信号:OS与AUTOSAR研究,微信公众号:OS与AUTOSAR研究】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    谷歌宣布放弃Fuchsia OS引入完整Chrome/Chromium浏览器

    此前的Chromium例行代码更新显示,谷歌决定终止将完整Chrome/Chromium浏览器引入至Fuchsia OS的计划。
    的头像 发表于 01-16 14:02 305次阅读

    单片机、嵌入式入门实验报告相关代码仿真介绍

    电子发烧友网站提供《单片机、嵌入式入门实验报告相关代码仿真介绍.zip》资料免费下载
    发表于 12-22 10:52 1次下载

    嵌入式系统的原理(简介入门)

    电子发烧友网站提供《嵌入式系统的原理(简介入门).pdf》资料免费下载
    发表于 11-17 14:36 2次下载
    嵌入式系统的原理(<b class='flag-5'>简介</b>与<b class='flag-5'>入门</b>)

    基于检索的大语言模型简介

    简介章节讲的是比较基础的,主要介绍了本次要介绍的概念,即检索(Retrieval)和大语言模型(LLM)
    的头像 发表于 11-15 14:50 369次阅读
    基于检索的大语言模型<b class='flag-5'>简介</b>

    AT32F423时钟配置入门指南

    AT32F423时钟配置本应用入门指南主要介绍两部分内容:1、基于雅特力提供的V2.x.x 的板级支持包来进行时钟源码的配置及修改2、如何使用配套的时钟配置工具来进行时钟路径及参数的设定,生成相应的时钟流程代码并使用。
    发表于 10-26 07:22

    AT32F403时钟配置入门指南

    AT32F403时钟配置本应用入门指南主要介绍两部分内容:1、基于雅特力提供的V2.x.x 的板级支持包来进行时钟源码的配置及修改2、如何使用配套的时钟配置工具来进行时钟路径及参数的设定,生成相应的时钟流程代码并使用。
    发表于 10-26 06:41

    AT32F402/405时钟配置入门指南

    AT32F402/405时钟配置本应用入门指南主要介绍两部分内容:1、基于雅特力提供的V2.x.x 的板级支持包来进行时钟源码的配置及修改2、如何使用配套的时钟配置工具来进行时钟路径及参数的设定,生成相应的时钟流程代码并使用。
    发表于 10-26 06:37

    AT32WB415时钟配置入门指南

    AT32WB415时钟配置本应用入门指南主要介绍两部分内容:1、基于雅特力提供的V2.x.x 的板级支持包来进行时钟源码的配置及修改2、如何使用配套的时钟配置工具来进行时钟路径及参数的设定,生成相应的时钟流程代码并使用。
    发表于 10-26 06:34

    AT32 MCU XMC入门指南

    AT32 MCU XMC入门指南本文介绍了XMC 外设功能,以及上述几种存储器和LCD 的驱动方式和相关代码
    发表于 10-25 08:08

    ZigBee无线网络技术入门与实战代码

    电子发烧友网站提供《ZigBee无线网络技术入门与实战代码.rar》资料免费下载
    发表于 10-09 17:11 0次下载
    ZigBee无线网络技术<b class='flag-5'>入门</b>与实战<b class='flag-5'>代码</b>

    CC2640R2的外设功能介绍

    教程简介 《CC2640R2 外设教程》是无锡谷雨电子有限公司针对 CC2640R2F 平台编写的五大教程 之一,全部教程如下:  《CC2640R2 蓝牙 5.0 入门教程》 本文档,也是必学
    发表于 09-22 07:30

    AVR1000b:编写用于AVR MCU的C代码入门

    电子发烧友网站提供《AVR1000b:编写用于AVR MCU的C代码入门.pdf》资料免费下载
    发表于 09-19 14:22 0次下载
    AVR1000b:编写用于AVR MCU的C<b class='flag-5'>代码</b><b class='flag-5'>入门</b>

    RAA489204 示例代码快速入门指南

    RAA489204 示例代码快速入门指南
    发表于 06-30 19:59 0次下载
    RAA489204 示例<b class='flag-5'>代码</b>快速<b class='flag-5'>入门</b>指南

    RAA489220 BFE 示例代码快速入门指南

    RAA489220 BFE 示例代码快速入门指南
    发表于 06-30 19:46 0次下载
    RAA489220 BFE 示例<b class='flag-5'>代码</b>快速<b class='flag-5'>入门</b>指南

    Pico:ed和Smart Cutebot入门介绍

    电子发烧友网站提供《Pico:ed和Smart Cutebot入门介绍.zip》资料免费下载
    发表于 06-13 15:51 0次下载
    Pico:ed和Smart Cutebot<b class='flag-5'>入门</b><b class='flag-5'>介绍</b>