Firefox OS 架构简析(1)

简介:

  十个月前,LinuxTOY首次报道 Mozilla B2G 系统。现在它已经成长为 Firefox OS,是时候去看看的它的架构了。

  本文脱胎自 B2G 官方 Wiki 页面,略过了其中代码示例的部分。为了方便理解,在部分描述时会跟当下流行的 Android 操作系统进行比较。

女神、壁虎和娃娃

  Firefox OS 从架构上来讲具有了三个层面:

  Gaia(盖亚,大地女神)Firefox OS 的用户界面,包含了在开机之后所有用户能看到部分,比如锁屏、主屏幕、应用程序启动器、拨号器、短信、相机等等作为智能手机必须具备的。Gaia 完全使用 HTML、CSS 和 JavaScript 编写,使用成为标准的 Web API 的接口和底层设备关联。因此,Gaia 可以在任何实现了 Web API 的设备上运行,比如桌面浏览器。Firefox OS 上的第三方程序也是以类似的方式运行并与 Gaia 共存的。

  Gecko(壁虎)Firefox OS 的应用程序运行时环境,用 C++(不知道后期是否会转用 Rust )实现了 Web API,供包括 Gaia 在内的应用程序使用,同时保证 Web API 可以在 Firefox OS 的目标硬件平台上运行。于是乎 Gecko 包含了必要的网络层,图像层、布局管理和 JavaScript 虚拟机以及移植层。

  Gonk(蛋形娃娃)Firefox OS 的操作系统底层,也是 Gecko 的一个目标移植平台,包含 Linux 内核和用户态的硬件抽象层,这一部分和 Android 以及嵌入式 Linux 共享了很多组件和驱动,比如 bluez, libusb 等。说是一个目标移植平台,是由于 Gecko 抽象层在理论上也可以运行在 Android 或者桌面操作系统上,不过由于 Firefox OS 项目主导了 Gonk 开发,可以提供一些其他系统上不具备的接口给 Gecko 使用,比如完整的电话通讯层。

光、信号和起源

  和绝大多数 Android 手机一样,预装 Firefox OS 的手机在开机后也会首先由极小化的 bootloader 实现最初的引导操作,然后链式引导更高级别更复杂的引导器,最终实现内核的加载。这个过程具体如何与设备制造商有关,相应的 bootloader 操作很有可能重用现在各个厂商在 Android 设备上所用的私有 fastboot 协议实现。意味着只要适当调整 Firefox OS 所用的引导器,在 Android 手机上使用现有刷机工具刷入 Firefox OS 在技术上没有障碍

  由于嵌入式领域还比较封闭,这个过程也会加载很可能是设备相关的私有调制解调器固件。于是乎在这个层面上 Firefox OS 和 Android 一样不是开放的。

  紧接的故事就是 Linux 内核的载入和 PID 1 号 init 进程的产生了,和一般嵌入式 Linux 的初始化没有太大差别。这里使用的 Linux 内核会紧随上游,不过也会吸纳厂商通过 Android Open Source Project 提交的一些尚未合并的设备相关代码。内核载入之后的大多数设备访问将通过 sysfs 的方式供用户态程序访问。

爬行动物时代

  在这里,b2g 以主系统进程的形态被 init 进程激活,并通过 RPC 或者 Socket 的方式实现和其他负责诸如网络、无线电等功能的进程通讯。除此之外,b2g 还会通过 dbus-daemon 和 IPDL 这两种特殊的方式实现用户态进程间通讯。

  dbus 不用赘述,用过任意一个现代桌面 Linux 发行版的用户对其都不陌生最近合并入了 systemd成为其一部分,不过依然可以单独运行IPDL 则是 Mozilla 特有的进程间通讯协议定义语言,允许在 C++ 进程间安全且有组织的传递消息。运行着 libxul.so 的b2g 进程将使用 IPDL 启动一系列内容子进程,上层的网页程序和其他网页内容将在独立的内容子进程中运行,在技术上和现在 Firefox 浏览器的标签页处理类似。

  面对多媒体文件, Gecko 对于 OGG Vorbis 音频, OGG Theora 视频和 WebM 视频这些开放格式将提供原生支持,以后正式发布时为了 WebRTC 引入对 Opus 的支持也是完全有可能的。而对于私有格式将通过 libstagefright 的方式访问私有解码器和实现硬件加速。

感触、表现和尾巴

  Gecko 负责将来自 Gonk 的各种输入事件解析成可供标准网页程序使用的 DOM 事件,包括按键、触屏操作等等,源自标准 Linux 输入设备 input-device。这些来自 Gecko 的 DOM API 由在 C++ 和 JavaScript 之间的外部函数接口和对象模型组成,使用普遍的 XPIDL 规定。

  网络通讯则分别交由 wpasupplicant 和 RIL(Radio Interface Layer) 完成。和桌面 Linux 发行版一样,wpasupplicant 负责 WiFi 环境下的接入,Gecko 为其开发了附属的 WifiWorker.js 供网页程序了解 WiFi 连接状态。RIL 则负责广域网络的通讯,其中负责跟调制解调部分沟通的 rild 很可能是来自制造商的私有代码,rildproxy 则是一个为了安全考虑而设置的中间代理,起到连结 rild 和 b2g 的作用。同样,也有 ril_worker.js 暴露状态和操作接口供上层程序使用。

  和 Android 4.0+ 类似,Gecko 完全使用 OpenGL ES 2.0 实现混合。Gecko 会将页面的各个区域绘制入内存缓冲,然后调用 OpenGL 命令将内容混合并渲染于屏幕上。和 Android 早期借助 skia 实现的软件混合相比,Firebox OS 从一开始就依赖于 GPU 的渲染能力,其效果值得期待。

  在 Gecko 的最底层则是负责和目标系统交互的移植层。在这一部分包含针对不同目标系统的平台相关代码(Gonk,Android,OS X 等),并将其统一化为可供 Gecko 上层子系统使用的 C++ API。

  更多内容敬请期待。

原文发布时间为:2012-08-31

本文来自云栖社区合作伙伴“Linux中国”

相关文章
|
2月前
|
Android开发 Swift iOS开发
深入探索iOS与Android操作系统的架构差异及其对应用开发的影响
在当今数字化时代,移动设备已经成为我们日常生活和工作不可或缺的一部分。其中,iOS和Android作为全球最流行的两大移动操作系统,各自拥有独特的系统架构和设计理念。本文将深入探讨iOS与Android的系统架构差异,并分析这些差异如何影响应用开发者的开发策略和用户体验设计。通过对两者的比较,我们可以更好地理解它们各自的优势和局限性,从而为开发者提供有价值的见解,帮助他们在这两个平台上开发出更高效、更符合用户需求的应用。
|
3月前
|
JSON JavaScript 前端开发
Vue3源码架构简析及Monorepo流程构建
【10月更文挑战第12天】Vue3源码架构简析及Monorepo流程构建
Vue3源码架构简析及Monorepo流程构建
|
3月前
|
存储 安全 物联网
操作系统的心脏:深入理解现代操作系统架构与核心技术
本文旨在为读者提供一个关于现代操作系统(OS)架构和核心技术的全面概述。通过分析OS的主要组件、功能以及它们如何协同工作,本文揭示了操作系统在计算机系统中的核心地位及其复杂性。我们将探讨进程管理、内存管理、文件系统和输入/输出(I/O)等关键技术,并讨论它们对系统性能的影响。此外,本文还将涵盖一些最新的操作系统趋势和技术,如云计算、虚拟化和物联网(IoT)。通过阅读本文,读者将获得对操作系统内部运作方式的深刻理解,这对于软件开发人员、IT专业人士以及对计算机科学感兴趣的任何人来说都是宝贵的知识。
|
3月前
|
安全 调度 开发者
探索操作系统的心脏:现代内核架构与挑战
【10月更文挑战第7天】 本文深入探讨了现代操作系统内核的复杂性和功能性,从微观角度剖析了内核在系统运行中的核心作用及其面临的主要技术挑战。通过浅显易懂的语言解释专业概念,旨在为读者提供一个关于操作系统内核的全面视角。
51 2
|
4月前
|
算法 安全 Linux
操作系统的心脏:深入理解现代操作系统架构
本文旨在探讨现代操作系统的核心概念、架构以及关键技术。我们将从操作系统的基本定义开始,逐步解析其功能模块,包括进程管理、内存管理和文件系统等,最后讨论操作系统在现实世界中的应用和未来发展趋势。通过深入浅出的方式,帮助读者全面理解操作系统的工作原理及其重要性。
85 1
|
3月前
|
存储 人工智能 物联网
探索现代操作系统的架构与演进
【10月更文挑战第5天】 本文旨在深入探讨现代操作系统的核心架构及其在技术演进中的变革。通过对操作系统的基本概念、关键组成部分以及它们如何相互协作的分析,为读者提供一个全面且易于理解的视角。同时,本文还将回顾操作系统从单任务到多任务、从单用户到多用户的发展过程,并展望未来可能的技术趋势。
|
2月前
|
IDE 安全 Android开发
深入探索Android与iOS操作系统的架构差异
本文旨在对比分析Android和iOS两大主流移动操作系统在架构设计上的根本差异。通过详细解读两者的系统架构、开发环境、以及安全性等方面,揭示它们各自的特点及优势,为开发者选择合适的平台提供参考。
|
2月前
|
缓存 运维 网络协议
深入Linux内核架构:操作系统的核心奥秘
深入Linux内核架构:操作系统的核心奥秘
72 2
|
3月前
|
存储 资源调度 算法
操作系统的心脏:深入理解内核架构与机制####
【10月更文挑战第16天】 本文旨在揭开操作系统最神秘的面纱——内核,通过剖析其架构设计与关键机制,引领读者一窥究竟。在这篇探索之旅中,我们将深入浅出地讨论内核的基本构成、进程管理的智慧、内存分配的策略,以及那至关重要的系统调用接口,揭示它们是如何协同工作,支撑起现代计算机系统的高效运行。这既是一次技术的深潜,也是对“看不见的手”调控数字世界的深刻理解。 ####
66 3
|
3月前
|
存储 算法 安全
操作系统的心脏:深入理解现代操作系统架构与调度机制
本文将探讨现代操作系统的核心概念,包括进程管理、内存管理和 I/O 系统。通过分析这些组件如何协作以提供稳定和高效的计算环境,帮助读者更好地理解操作系统在现代计算中的重要性。我们将从宏观角度出发,逐步深入到微观细节,为读者提供全面而详细的技术解析。

热门文章

最新文章