fuchsia/zircon研究
目前谷歌自研的新系统——基于微内核zircon的fuchsia正在积极开发。作为技术跟踪,本专栏希望能自己能力范围内将fuchsia操作系统的方方面面研究并分享出来。
一墨一飞花
人生没有白走的路,每一步都算数。成为最好的自己。
展开
-
Fuchsia MMC框架简析
本文简单分析下Fuchsia的MMC框架,主要是基于mmc协议的初始化流程进行说明。至于mmc框架中的SD以及SDIO协议流程本文不涉及。另外,Fuchsia块设备层以及文件系统层的分析,本文也不涉及。下表为目前rcar-M3单板系统的“设备树”(为描述方便,省略了部分设备树节点)。 root$ dm dump [root] <root> pi...原创 2020-04-18 17:27:57 · 1061 阅读 · 0 评论 -
zircon初始化流程
点击查看大图原创 2020-01-04 11:22:50 · 359 阅读 · 0 评论 -
fuchsia coordinator及devhost
Devmgr进程包含Coordinator(设备协调器)用于跟踪驱动程序和设备,进行驱动程序的发现、设备主机进程的创建和走向的管理,以及维护设备文件系统(devfs)。Devmgr进程是zircon继内核加载的第一个用户态进程—userboot(类似linux的init进程)和userboot加载的第一个进程—bootsvc(保存启动相关信息,并提供bootfs等服务)之后的非常重要的一个...原创 2020-01-04 11:13:54 · 649 阅读 · 0 评论 -
fuchsia devfs分析
devfs设备文件系统,主要负责fuchsia中管理的设备在本地文件系统中文件节点的呈现。其文件路径为“/dev”。1.devfs目录构建devfs随着devmgr进程的启动而初始化。通过“devmgr::devfs_init”函数,初始化一个devfs目录,主要两点: 1.class目录树的创建(包含所有ddk/protodefs.h文件中定义的不带“PF_NOPUB”flag的协议)...原创 2020-01-04 11:07:59 · 576 阅读 · 0 评论 -
fuchsia中断注入流程
以virtio net接收中断为例。RxStream::Notify //virtionet后端接收到数据包后,通过Notify函数向虚拟机注入中断 chain_.Return queue_->Return interrupt_(actions) //在VirtioNetImpl::Start函数中会调用rx_stream_.Init将Vi...原创 2020-01-04 10:56:45 · 411 阅读 · 0 评论 -
zircon的event实现及async loop机制
zircon中的event是一种异步并发的机制。用户空间可以对8个信号bit位进行设置、清除和等待。event的创建接口为zx_event_create()zx_event_create sys_event_create EnforceBasicPolicy //判断当前进程是否有创建event的权限 EventDispatcher::Create //...原创 2019-11-25 08:33:12 · 528 阅读 · 1 评论 -
google netstack 数据链路层分析
netstack ==================================>网络协议栈main函数路径:--src\connectivity\network\netstack\main.gomain() //--分析关键步骤 stk := tcpipstack.New([]string{ipv4.ProtocolName,ipv6.ProtocolName,arp.P...原创 2019-08-24 09:41:16 · 1544 阅读 · 0 评论 -
virtio net前端
######版本为linux4.13.2#########virtio_init bus_register(&virtio_bus)static struct bus_type virtio_bus = { .name = "virtio", .match = virtio_dev_match, .dev_groups = virtio_dev_gr...原创 2019-08-24 09:38:07 · 1544 阅读 · 0 评论 -
fuchsia中virtio 后端实现
================================================涉及的其他类class PciDevicePCI设备基类,存储pci设备状态,提供ReadBar、WriteBar虚接口函数。ReadConfig ReadConfigWord //读配置空间寄存器WriteConfig //写配置寄存器空间Interrupt //如果有pci pen...原创 2019-08-24 09:37:00 · 1004 阅读 · 0 评论 -
VirtioNet独立进程分析
VirtioNet======在vmm中启动和初始化vmm/main.cc中main函数启动网络设备时,会优先判断legacy_net是否使能,在legacy_net不使能的情况下会进入VirtioNet初始化分支,下面具体分析。1.在virtio设备初始化之前先把pci总线初始化起来(virtio设备都挂载pci总线上):1.1PciBus构造函数:PciBus bus(&gu...原创 2019-08-24 09:35:27 · 675 阅读 · 0 评论 -
netcfg 进程分析
netcfg 进程 -garnet\bin\netcfg\src\main.rs//概括而言就是通过一个watcher来监听网卡目录,当有新节点添加时,通过IPC调用netstack的AddEthernetDevice接口添加网口端点fn main() const ETHDIR: &str = "/dev/class/ethernet"; //常量字符串,监控的网卡目录...原创 2019-08-24 09:33:03 · 901 阅读 · 0 评论 -
sysmgr分析
一、概述sysmgr,负责建立一个全局系统服务的访问环境。sysmgr的设计相当健壮。如果有任何服务死后,它们将在下一次应用程序尝试连接到该服务时自动重启。默认情况下,sysmgr从' /system/data/sysmgr/ '读取所有配置文件。这些配置文件具有下列格式之一:## CONFIGURATION### Servicessysmgr服务配置文件是一个JSON文件...原创 2019-08-24 09:27:58 · 1624 阅读 · 0 评论 -
realm容器类分析
class Realm——>继承自ComponentContainer<ComponentControllerImpl>Realm::Realm(RealmArgs args) struct RealmArgs提供Make方法,将一堆参数(初始化成员变量)组合在一起 根环境,初始化svc service channel...原创 2019-08-24 09:25:41 · 337 阅读 · 0 评论 -
fuchsia appmgr分析
一.概述appmgr启动:devmgr——>fuchsia_starter1.等待fshost准备好/system目录2.调用coordinator方法,扫描system目录下的driver3.将devmgr中与appmgr通信的channel的一端——appmgr_server传给appmgr(后续可以利用appmgr_client访问appmgr的服务)4.调用devmgr...原创 2019-08-24 09:24:44 · 1806 阅读 · 4 评论 -
fuchsia网卡通用接口层及legacy方式网络虚拟化实现
通用接口层实现所在路径 —— zircon\system\dev\ethernet\ethernet\ethernet.cpp通用接口层也是以驱动形式加载,挂接在发布ZX_PROTOCOL_ETHMAC协议的网卡驱动设备下。通用接口层驱动加载流程:EthDev0::EthBind-->EthDev0::AddDevice构造eth::EthDev0对象;调用AddD...原创 2019-08-24 09:21:38 · 640 阅读 · 0 评论 -
fuchisia 驱动框架分析
一、驱动添加教程1.在”zircon/system/dev/board/“目录下添加板级相关目录,如orangepipc2。目录下添加bsp文件,如orangepipc2.c。为platform bus添加board driver。具体写法示例:ZIRCON_DRIVER_BEGIN(orangepipc2_bus, orangepipc2_bus_driver_ops,"zirco...原创 2019-08-24 09:15:52 · 1598 阅读 · 0 评论 -
Banjo教程
本文档是[Zircon驱动程序开发工具包](overview.md)文档的一部分。[TOC]Banjo是一个“转换器”(就像[FIDL的`fidlc`](https://fuchsia.googlesource.com/docs/+/master/development/languages/fidl/README.md))&MDASH;将接口定义语言(** IDL **)转换为目标语言...翻译 2019-05-25 14:31:09 · 725 阅读 · 0 评论 -
ddk高级主题和提示
#高级主题和提示本文档是[Driver Development Kit教程](ddk-tutorial.md)文档的一部分。##需要很长时间才能初始化如果您的设备需要很长时间才能初始化,该怎么办?当我们讨论上面的** null_bind()**函数时,我们成功返回告诉设备管理器驱动程序现在与设备关联了。我们不能在bind函数上花费很多时间;我们基本上应该初始化我们的设备,发布它,...翻译 2019-05-25 10:08:25 · 920 阅读 · 0 评论 -
ddk驱动简单示例
#简单的驱动程序本文档是[Driver Development Kit教程](ddk-tutorial.md)文档的一部分。##概述在本章中,我们将了解驱动程序的基础知识。我们将从简单到稍微复杂,每个驱动程序说明一组具体的概念如下:`dev/misc/demo-null` 和 `dev/misc/demo-zero`:*小的,“no-state”的接收器/源驱动程序,用于解释...翻译 2019-05-25 10:04:42 · 2304 阅读 · 0 评论 -
zircon ddk快速入门
# 入门本文档是[Driver Development Kit教程](ddk-tutorial.md)文档的一部分。编写设备驱动程序通常被视为一项艰巨的任务,充满了复杂性,并且需要鲜为人知的内核机密的晦涩知识。本节的目标是揭开这一过程的神秘面纱;你会学到一切需要知道的如何编写设备驱动程序的知识。从他们的工作开始,它们如何起作用,以及它们如何适应整个系统。##概述在最高级别,设备...翻译 2019-05-25 10:03:37 · 753 阅读 · 0 评论 -
tracing
#将跟踪添加到设备驱动程序本文档介绍如何向设备驱动程序添加跟踪。##概述请阅读[Fuchsia追踪系统设计](../tracing/design.md)有关跟踪的概述。##跟踪提供者驱动程序不必指定跟踪提供程序,devhost进程通过`libdriver.so`提供它。这里提到它是为引入主题。##添加跟踪记录###来源添加通过调用`TRACE_*()`宏(`dd...翻译 2019-05-25 10:02:32 · 1947 阅读 · 0 评论 -
Zircon的平台总线
#Zircon的平台总线## 介绍术语**平台总线**是指特定的Zircon驱动程序,源代码位于[system/dev/bus/platform/](../../system/dev/bus/platform/)).但是,这个术语也指管理基于SOC的arm64平台上的低级驱动程序的框架。为了区分下面两个,我们将在引用特定驱动程序时使用*platform bus driver*,以及在引用...翻译 2019-05-25 09:56:45 · 1453 阅读 · 0 评论 -
zircon设备ops
#设备协议设备驱动程序实现了一组 hook(方法)来支持可以在他们发布的设备上执行的操作。这些描述如下,包括每个 hook使用的通过默认实现采取的行动(如果驱动程序不提供自己的实现)。##version该字段必须设置为“DEVICE_OPS_VERSION”```uint64_t version;```##open通过设备文件系统打开设备时调用open hook,或克隆现...翻译 2019-05-25 09:55:57 · 451 阅读 · 0 评论 -
Zircon设备模型
#Zircon设备模型## 介绍在Zircon中,设备驱动程序实现为ELF共享库(DSO),加载到设备主机(devhost)进程中。设备管理器(devmgr)进程,包含设备协调器(Coordinator),用于跟踪驱动程序和设备,进行管理发现驱动程序,设备主机进程的创建和方向,以及维护设备文件系统(devfs),这是用户空间的服务和应用程序(受其命名空间约束)获得设备访问权限的机制。设...翻译 2019-05-25 09:55:02 · 523 阅读 · 0 评论 -
fuchsia固件开发
#Device Firmware设备固件是二进制blob,包含由硬件设备执行的代码。二进制blob在驱动程序的命名空间中可用于加载。设备固件存储在CIPD中(Chrome Infrastructure Package Deployment)并在Google Storage中镜像备份。## 在你开始之前确保CIPD可用。 cipd必须在PATH中或`zircon/../buildt...翻译 2019-05-25 09:53:45 · 1245 阅读 · 0 评论 -
Zircon驱动开发
#Zircon驱动开发Zircon驱动程序是在设备主机进程的用户空间中动态加载的共享库。加载驱动程序的进程由Device Coordinator控制。有关详细信息,请参见[Device Model](device-model.md)设备主机,Device Coordinator以及驱动程序和设备生命周期。##目录结构Zircon驱动程序位于[system/dev](../../syst...翻译 2019-05-25 09:52:26 · 1850 阅读 · 0 评论 -
fuchsia hub文件系统
原文路径:fuchsia/docs/the-book/hub.mdhub是什么意思?hub是zircon 自我检查的门户。它使工具能够在运行时访问有关realms(本文翻译为领域)和component(本文翻译为组件)实例的详细结构信息,例如names,job和process ids以及published services。译者注:类似于linux proc 和sysfs系统组织形...原创 2019-09-25 22:38:10 · 684 阅读 · 0 评论 -
blobfs中的默克尔树应用
1.Merkle Tree概念Merkle Tree,通常也被称作Hash Tree,顾名思义,就是存储hash值的一棵树。Merkle树的叶子是数据块(例如,文件或者文件的集合)的hash值。非叶节点是其对应子节点串联字符串的hash。1.1、HashHash是一个把任意长度的数据映射成固定长度数据的函数。例如,对于数据完整性校验,最简单的方法是对整个数据做Hash运...原创 2019-09-20 15:16:09 · 761 阅读 · 0 评论