@qinyun
2018-04-24T17:58:48.000000Z
字数 1955
阅读 1971
未分类
日前,Google发布了名为“the book”的Fuchsia官方文档。Fuchsia是Google针对IoT和移动设备新推出的一种操作系统,它基于名为“Zircon”的全新微内核。
Google Fuchsia的源码于2016年8月首次在GitHub上出现,当时Google没有任何的官方说明,但其源码显示其能够支持跨平台开发,不仅支持手机和PC,还包括汽车媒体系统、家具物联等其他嵌入式设备。
与之前的Android相同,Fuchsia是一款开源且免费的系统。但是与Chrome、Android不同的是,Fuchsia不是基于Linux,而是基于Google自己的新微内核,名为Zirco。
Zirkon由一位名叫Travis Geiselbrecht的程序员开发,他还创建了支持Haiku OS的NewOS内核。Zircon使用C++编写,在组成上包括一个微内核,以及一组用户空间服务、驱动和软件库,可处理系统启动、进程加载等一些经典内核任务。Zircon的系统调用除了wait_one, wait_many, port_wait and sleep之外,一般是非阻塞的。
Zircon支持在Linux或macOS上构建,进而创建一个可引导的bootfs镜像。Zircon最初是LK的一个分支。LK是Google为嵌入式系统开发的另一种内核,意在实现对FreeRTOS或ThreadX的开源替代。但是Zircon没有LK那么严格的需求,因为它是设计运行在具有充足内存和高速处理器的现代设备上。
Zircon可管理的资源包括:处理时间、内存、I/O、中断、信号与等待等。用户区域(user land)通过句柄(handle)使用资源,句柄有权利(rights)关联到资源,并传递复制、传递、读取、写入、执行等行动的执行权限。Zircon中的驱动实现为ELF软件库,并加载到进程中。驱动管理进程devmgr追踪所有的驱动和设备情况,管理对驱动的发现,并管控对设备的访问。设备可以使用PCI protocol、USB protocol等C ABI实现协议(Protocol)。
Zirocn并不支持Unix风格的信号,也没有提供任何可直接实现的机制。它支持句柄上的等待操作。等待包括一系列不同的信号状态,例如写入就绪、运行、停止等。同样,Zircon不具有类似于Unix的fork和exec操作,而是使用launchpad软件库创建进程。下面给出了使用launchpad创建进程的一个示例代码段:
launchpad_t* lp;
launchpad_create(job, "processname", &lp);
launchpad_load_from_file(lp, argv[0]);
launchpad_set_args(lp, argc, argv);
launchpad_set_environ(lp, env);
// << 此处可添加其它launchpad_*()调用,实现建立初始fds、句柄等。 >>
zx_handle_t proc;
const char* errmsg;
zx_status_t status = launchpad_go(lp, &proc, &errmsg);
if (status < 0)
printf("launchpad failed: %s: %d\n", errmsg, status);
要全面了解Zircon,建议阅读全部文档。Zircon依然处于繁重的开发过程中,但是Google当前并未积极需求第三方的贡献。
正如上文所说,Fuchsia能够嵌入家具、汽车等硬件系统,这是Chrome、Android目前无法做到的,可以看出,Fuchsia是Google从PC端、手机端过渡到现在物联网领域的一项战略。在很多人看来,Fuchsia是Google统一Chrome、Android的一项重要举措,它把移动、PC和物联网围成一个闭环的Google生态,像苹果那样,能从根本上解决碎片化的问题。
据了解,Fuchsia还将支持Dart和Flutter,Dart是Google开发脚本语言,现在已经用于Google内部的项目中,而Flutter是Dart中构建跨平台、高性能移动应用程序的工具,虽然Flutter目前仍处于测试阶段,但从Google这两年的动作来看,Flutter或许也是Google Fuchsia战略计划中的一部分。所以,作为开发者,时刻保持积极的学习态度,跟上技术的发展潮流,其他的,等待时间告诉我们答案。