|
 作者 | 马超责编 | 胡巍巍出品 | 程序人生(ID:coder_life)最近我国自研的操作系统接连开源,先是MiniGui(Github地址:https://github.com/VincentWei/minigui),可能现在提起MiniGui大家已经比较陌生了。不过对于笔者-曾经的CSDN嵌入式论坛版主而言,MiniGui是个如雷贯耳的名字,在十几年前MiniGui和WINCE是各个各种开发板的标配,当时论坛上也有各种关于MiniGui移植及开发的帖子。但是由于当时的嵌入式系统多用来制作手持式PDA,车载导航仪等设备,所以安卓出现后迅速占领了上述市场,MiniGUI等嵌入式操作系统逐渐没落。但是我们整理互联网发展的脉络可以看到,内容的不断丰富与终端的不断扩展是两条主线,随着网上数据量的持续爆炸性增长,今后新增的流量肯定主要来自于对于万物互联的红利。而与传统互联网内容+用户的模式不同,物联网则是场景+用户的模式,谁能整合场景谁能笑到最后。所以之后的嵌入式系统又迎来了生命中的第二个春天。
8 _2 d( S$ \+ |$ D 巨头们的布局6 k% a8 f* }; `/ O, y
腾讯在三天前正式发布了其物联网终端的操作系统TinyOS(Github地址:https://github.com/Tencent/TencentOS-tiny),其系统架构图如下: 目前看其内核部分已经开发完成,并已经完全开源。虽然从其从tinyos内核的代码来看(详见https://blog.csdn.net/BEYONDMA/article/details/101355221),还是为物联终端做了一定优化与裁减的,不过从下面的场景图来看,腾讯其实醉翁之意不在酒,以操作系统为契机入局物联网的相关链条已经规划完整。( y/ t# E0 G9 z, M: j
3 K* L0 a7 {( }% [
而且从比操作系统发布还早几天就挂在淘宝上的开发板来看,更是说明腾讯对于旗下云平台能够整合物联场景的巨大野心。! u* z2 K! G- k! v/ g( r% M
AliOS Thing3.0发布 云栖大会第三天,阿里不出意外的拿出了AliOS Things 3.0(Github地址https://github.com/alibaba/AliOS-Things/tree/rel_3.0.0),与TencentOS Tiny一样这款OS也是与阿里云平台无缝对接的,而且它的内核还直接支持了自家的AI芯片,提前布局AI+物联网。由于AliOS Things已经开源两年有余,所以其开发者体验相对较好,他们的IDE是基于VSCODE的,笔者已经下单他们的开发板了,后续亲测OS后再发体验。可见巨头的逻辑就是要整合物联网时代的场景,他们的OS都是免费的,而且技术支持也强,不过巨头就是要做物联时代的ANDROID,最终一统天下。( l x4 J9 @! J
老牌嵌入式操作系统的选择% u% W$ W" t. |( K" Y, l9 {
- d9 H- H. v& @. r6 y5 U& U1 [MiniGui做为已经存在了20多年的嵌入式操作系统,其架构图如下:& I Z; W0 o; a x3 D
从底至上,MiniGUI 由如下几个模块组成:8 p- S1 ? ?* a
图形抽象层(Graphics Abstraction Layer,GAL):图形抽象层将来自不同操作系统或设备的图形接口进行抽象,为 MiniGUI 上层提供统一的图形接口。在图形抽象层内,包含有针对 Linux FB 设备、eCos LCD 设备等的软件组成部分。这些软件组成部分通过调用底层设备的接口来实现具体的图形抽象层操作,如打开设备、设置分辨率及显示模式、关闭设备等。我们将这些用于适配图形抽象层接口的软件组成部分称为“引擎(engine)”,其概念和操作系统中的设备驱动程序类似。输入抽象层(Input Abstraction Layer,IAL):和 GAL 类似,输入抽象层将 MiniGUI 涉及的所有输入设备,如键盘(keyboard)、小键盘(keypad)、鼠标(mouse)、触摸屏(touch screen)等抽象了出来,为上层提供一致的接口。要支持不同的键盘、触摸屏或者鼠标接口,则通过为 IAL 编写不同的输入引擎实现。MiniGUI 通过 IAL 及其输入引擎,提供对 Linux 控制台(键盘及鼠标)、触摸屏、遥控器、小键盘等输入设备的支持。图形设备接口(Graphics Device Interfaces,GDI):该模块基于图形抽象层为上层应用程序提供图形相关的接口,如绘制曲线、输出文本、填充矩形等等。图形设备接口中含包含其他比较独立的子模块,如字体字符集(font and charset)支持、图像(image)支持等。消息处理模块(Messaging Module):该模块在输入抽象层基础上,实现了 MiniGUI 的消息处理机制,为上层提供了完备的消息管理接口。众所周知,几乎所有的GUI 系统本质上都是事件驱动的,系统自身的运行,以及GUI 应用程序的运行,都依赖于消息处理模块。多窗口处理模块(Windowing Module)和控件(Control 或 Widget):基于图形设备接口和消息处理模块,MiniGUI 实现了多窗口处理模块。该模块为上层应用程序提供了创建主窗口和控件的基本接口,并负责维护控件类。控件类是用来实现控件代码重用的重要概念,利用控件类(control class),我们可以创建属于某个控件类的多个控件实例(instance),从而让这些控件实例使用同一个控件类的代码,这样,我们就实现了类似 C++ 那样的类和实例概念,从而可以最大程度上重复利用已有代码,并提高软件的可维护性。MiniGUI 的控件模块实现了常见的 GUI 控件,如静态框、按钮、编辑框、列表框、下拉框等等。外观支持(Look and Feel):这个模块是 MiniGUI V3.0 提供给上层应用程序的接口,可用来定制 MiniGUI 窗口、控件的绘制。在 MiniGUI V3.0 之前的版本中,对主窗口和控件的定制能力,还没有被抽离出来形成独立的模块,但我们仍然可以通过配置选项让 MiniGUI 的主窗口、控件具有三种显示风格,分别是:类似 PC 的三维风格(PC3D)、平板风格(FLAT)、流行风格(FASHION)。在 MiniGUI 3.0 中,主窗口和控件的外观可完全由应用程序自行定制,在创建主窗口或者控件时,指定外观渲染器(renderer)的名称,就可以让主窗口或者控件具有各自不同的外观。可以看到MiniGUI从创立伊始就放弃了对于RTOS内核的编写,直接基于linux等内核来做封装。简单聊两句基于MiniGUI的图形应用开发。 typedef struct _MSG
1 e# I7 C$ e# N' v {" L3 d5 {* }- k1 ~6 d, j; M
HWND hwnd;
& i6 j/ a0 P1 P; s int message;
1 s7 w, i/ I' A7 r% | WPARAM wParam;. z- ?+ m4 o" B2 \. g7 b
LPARAM lParam;
$ W" y- n& n# a4 \! G1 r/ [ #ifdef _LITE_VERSION) E) g V2 @ L4 x, E$ _8 Y+ _
unsigned int time;
, l' a9 ] W- Q% t/ G #else
2 v; _# {; H7 S struct timeval time;
. y. L/ R4 D- N6 l* t5 l1 E #endif
! |; e5 ^* Z- r% I0 o POINT pt;
& j) _- C3 X. b9 h- t9 V C #ifndef _LITE_VERSION+ f6 h M% z& l3 V1 k$ w" X9 t
void* pAdd;
6 m9 W3 {; l3 ?! l. r) A+ _% X #endif
6 Z4 x2 {) o4 X& e- C3 A, n" [ }MSG;
* a8 b" m- Y$ ~typedef MSG* PMSG;
4 ]" b1 S. F- u8 s2 v: J* {可以看到其对于消息的定义几乎与WINDOWS一致,其建立窗体等操作也几乎与WINDOWS一样。所以MiniGUI的设计有很大程序是为降低嵌入式系统图形界面开发难度而产生的。1 w* R; l/ {# `5 f0 l
/ k" \& p4 P) o% |) ?) v2 ?8 y
国产实时操作系统内核的先驱RTthread提到咱们国产的loT操作系统RTthread也是一个无论如何也绕不过去的标志,如果RTthread在06年初就发布了第一版,而且经过了这十几年的上亿台设备装机的技术沉淀,RTthread的社区也已经俨然发展成为国内最强的嵌入式社区了,笔者刚刚到他们的论坛上逛了一圈,真的是强手如云,大咖云集。具体内核相关知识后续会再发文介绍这里也就不再赘述了。而且最新的消息显示MiniGUI开始支持RTthread的内核了,可见传统的嵌入式操作系统厂商的策略是要尽量保持生态的多元化,抱团取暖。HybridOS的开源计划最近MiniGUI的飞漫软件又官宣了他们的HybridOS开源计划,而根据目前的材料看HybridOS最大的看点是要用HTML来统一UI的开发,这与之前使用WIN32的设计来统一UI开发的逻辑如出一辙。我们知道由于物联网终端真的是不一而足,与手机终端完全不同,其不同终端的碎片化需求太多太复杂,比如,有的智能灯泡要蓝牙即可,而智能空调可能就要有Wi-Fi了。而我们金融行业要做智能合约可能对于终端的算力又有一定的要求,这样碎片化的场景,由于Android硬件设备的要求门槛较高,就不太适合了, 而直接用Linux裁减,这对于人才的要求又太高。所以与腾讯等巨头整合全场景的目标不同,MiniGUI的背后其是保持生态多样性的逻辑,他的目标是降低开发门槛,避免初创公司必须选择鸿蒙或者TinyOS这种大厂的操作系统。让场景的提供方可以通过较低成本验证自身的想法,而避免从一开始就走上巨头们早已画好的圆圈。在他们的官宣当中对于其后续要发布的HybridOS物联网操作系统有如目标:1. HybridOS 的设备端系统基于 Linux 内核,充分利用 Linux 内核生态,降低各种驱动程序的开发难度以及各种协议栈的支持难度,从而降低开发成本。2. 和基于 RTOS(实时操作系统)技术发展而来的物联网操作系统(如RT-Thread、LiteOS)相比,HybridOS 更倾向于运行在具有更高硬件配置的智能物联网设备上,而不是小型的单功能物联网设备上,后者的硬件配置往往有限。3. HybridOS 不仅仅运行在智能物联网设备中,它同时还提供了针对云端以及客户端的标准框架和编程接口,为开发者提供了从设备到云再到客户端的完整软件栈和协议栈。在未来,HybridOS 还计划统一客户端和设备端上的 App 开发接口。4. HybridOS 将基于区块链技术为物与物之间的通讯提供一个全新的实现方法。在 HybridOS定义的实现方法下,所有的数据都带有不可篡改的数字签名以及时间戳,而所有数据的传输和存储都可加密。这将从根本上提高物联网的安全性。
" E0 x" x5 L6 F' Z @4 m& f/ {/ E; Z% o9 B
后记
* U% H, p- T8 r, i! i- x; E$ f2 X: N$ h5 P7 Q
我们可以看到巨头的逻辑是要让其它公司免费使用其OS上车,然后接入其loT云平台成者直接收购无缝整合,败者自生自灭,从而将自己立于不败之地,而传统的嵌入式公司逻辑则是降低OS的使用开发门槛,让物联网生态链上的企业能有自主选择。也让我们拭目以待,物联网时代能否产生新的巨头。 声明:本文为 CSDN 博主马超(ID:beyondma)的原创文章,版权归作者所有。扫描下方二维码,查看博主精彩分享 热 文 推 荐
" H1 w; c( v/ i* X☞谷歌、IBM 们的“量子争霸”迷局☞Python 分析国庆热门旅游景点,告诉你哪些地方好玩、便宜、人又少!
" M7 R* k1 r0 a; J* N' [3 E8 q t2 i: [☞绝对不止你一人觉得软件贵得离谱!☞云栖大会|当数据中台遇上智能 看中台“鼻祖”阿里巴巴又有什么新花样?5 y* M$ x1 w2 m, }1 z u$ I3 ?
☞年薪 170 万阿里 P8 程序员征婚上热搜,程序员婚恋观大曝光!
6 i8 F# ^: z- |$ z2 t& c- a$ W0 X☞对比C++和Python,谈谈指针与引用
9 @' l9 P3 h/ Y. p: ~# k9 f☞肖仰华:知识图谱构建的三要素、三原则和九大策略 | AI ProCon 2019
$ g2 w7 F) r; g☞以太坊交易量第一合约FAIRWIN被爆漏洞, 竟是因为这个接口被滥用…… 你点的每个“在看”,我都认真当成了喜欢
' {2 B% Y& a$ d, \0 w# Z来源:http://mp.weixin.qq.com/s?src=11×tamp=1569918604&ver=1885&signature=SRLrUXzkwEigTQqq8basQOqjEw5rIrSaTbP9Y65n1uEV6q9UNfoIbSQCPK4OcFo9GYOlGHLG3H-WZh3avkPiCwyPonrHk71uWA4QXq44xG2DvO3iU8VpH-DK-NDegUnD&new=1
* |6 f- {/ ?% x& n7 X' k R免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|