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

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

3天内不再提示

嵌入式系统又迎来了生命中的第二个春天

倩倩 来源:lq 作者: CSDN 2019-10-08 16:25 次阅读

最近我国自研的操作系统接连开源,先是MiniGui(Github地址:https://github.com/VincentWei/minigui),可能现在提起MiniGui大家已经比较陌生了。

不过对于笔者-曾经的CSDN嵌入式论坛版主而言,MiniGui是个如雷贯耳的名字,在十几年前MiniGui和WINCE是各个各种开发板的标配,当时论坛上也有各种关于MiniGui移植及开发的帖子。

但是由于当时的嵌入式系统多用来制作手持式PDA,车载导航仪等设备,所以安卓出现后迅速占领了上述市场,MiniGUI等嵌入式操作系统逐渐没落。

但是我们整理互联网发展的脉络可以看到,内容的不断丰富与终端的不断扩展是两条主线,随着网上数据量的持续爆炸性增长,今后新增的流量肯定主要来自于对于万物互联的红利。

而与传统互联网内容+用户的模式不同,物联网则是场景+用户的模式,谁能整合场景谁能笑到最后。所以之后的嵌入式系统又迎来了生命中的第二个春天。

巨头们的布局

腾讯在三天前正式发布了其物联网终端的操作系统TinyOS(Github地址:https://github.com/Tencent/TencentOS-tiny),其系统架构图如下:

目前看其内核部分已经开发完成,并已经完全开源。虽然从其从tinyos内核的代码来看(详见https://blog.csdn.net/BEYONDMA/article/details/101355221),还是为物联终端做了一定优化与裁减的,不过从下面的场景图来看,腾讯其实醉翁之意不在酒,以操作系统为契机入局物联网的相关链条已经规划完整。

而且从比操作系统发布还早几天就挂在淘宝上的开发板来看,更是说明腾讯对于旗下云平台能够整合物联场景的巨大野心。

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,最终一统天下。

老牌嵌入式操作系统的选择

MiniGui做为已经存在了20多年的嵌入式操作系统,其架构图如下:

从底至上,MiniGUI 由如下几个模块组成:

图形抽象层(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的图形应用开发。

typedefstruct _MSG { HWND hwnd;int message; WPARAM wParam; LPARAM lParam;#ifdef _LITE_VERSIONunsignedint time;#elsestructtimevaltime;#endifPOINT pt;#ifndef _LITE_VERSIONvoid* pAdd;#endif }MSG;typedef MSG* PMSG;

可以看到其对于消息的定义几乎与WINDOWS一致,其建立窗体等操作也几乎与WINDOWS一样。所以MiniGUI的设计有很大程序是为降低嵌入式系统图形界面开发难度而产生的。

国产实时操作系统内核的先驱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-ThreadLiteOS)相比,HybridOS 更倾向于运行在具有更高硬件配置的智能物联网设备上,而不是小型的单功能物联网设备上,后者的硬件配置往往有限。

3. HybridOS 不仅仅运行在智能物联网设备中,它同时还提供了针对云端以及客户端的标准框架和编程接口,为开发者提供了从设备到云再到客户端的完整软件栈和协议栈。在未来,HybridOS 还计划统一客户端和设备端上的 App 开发接口。

4. HybridOS 将基于区块链技术为物与物之间的通讯提供一个全新的实现方法。在 HybridOS定义的实现方法下,所有的数据都带有不可篡改的数字签名以及时间戳,而所有数据的传输和存储都可加密。这将从根本上提高物联网的安全性。

后记

我们可以看到巨头的逻辑是要让其它公司免费使用其OS上车,然后接入其loT云平台成者直接收购无缝整合,败者自生自灭,从而将自己立于不败之地,而传统的嵌入式公司逻辑则是降低OS的使用开发门槛,让物联网生态链上的企业能有自主选择。也让我们拭目以待,物联网时代能否产生新的巨头。

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

    关注

    40

    文章

    3372

    浏览量

    128131
  • 物联网
    +关注

    关注

    2860

    文章

    41250

    浏览量

    357360
  • 代码
    +关注

    关注

    30

    文章

    4536

    浏览量

    66487
收藏 人收藏

    评论

    相关推荐

    vlookup怎么把第二个重复值显示

    如何使用VLOOKUP来显示第二个重复值。 要了解如何显示第二个重复值,首先需要了解VLOOKUP函数的基本用法。VLOOKUP函数包含四个参数,分别是查找值、查找范围、返回列号和匹配类型。查找值是要在数据表中查找的值,查找范围是包含要查找值的列范围,返回列号是要返
    的头像 发表于 12-03 10:24 890次阅读

    labview数据采集处理,在数据结构后接一生产—消费循环结构,如何优化第二个事件可以触发

    的时生产-消费的循环结构。但这样的逻辑下,事件结构在完成“串口开启”事件后,将进入生产-消费者循环无法跳出,进行第二个事件的触发。 我现在有一种朴素的解决方法,用一布尔控件控制生产消费循环的停止与开始
    发表于 10-18 21:01

    嵌入式新手应该怎么学?

    的,对体积,功耗,成本等等有严格要求的一计算机系统。看起来是很复杂的,其实我们来总结一下就是两点: 第一,嵌入式系统是一计算机
    发表于 09-08 10:22

    两个电阻串联是否影响第二个的电压电流

    两个电阻串联是否影响第二个的电压电流  电阻串联是指将两个或多个电阻器连接在一起,其中每个电阻器的末端与相邻电阻器的起始端相连。在电路中,串联电阻的总电阻等于每个电阻的总和。接下来,让我们讨论一下
    的头像 发表于 09-01 16:49 1476次阅读

    如何在Toradex i.MX8QXP SOM上启用第二个以太网接口?

    我正在尝试在 Toradex i.MX8QXPSOM 上启用第二个以太网接口。我以前从未这样做过并发布到 Toradex 论坛寻求帮助。从那以后我运气不太好,我在这里发帖。我附上了我当前的 dts
    发表于 05-30 08:28

    如何为SPIFFS使用第二个SPI闪存芯片?

    我正在寻找帮助设置第二个 spi 闪存芯片的链接。 这第二个芯片将在其他 spi 端口之一上。 第二个芯片不会与引导存储器芯片并联。
    发表于 05-30 07:50

    如何将第二个(自定义)引导加载程序 + 应用程序移动到 i.MX RT1050平台上的SDRAM?

    在 i.MX RT1050 EVKB 上,我开发了第二个引导加载程序,包括从 QSPI 闪存执行的 XIP,然后我开发了一应用程序,我在其中定义了 XIP_EXTERNAL_FLASH = 1宏
    发表于 05-29 09:00

    在使用rt-thread的SMP运行时第二个核启动,导致系统卡死无法运行?

    如图1当双核启动时,第二个核能够运行到它的空闲线程中,msh相关命令输入没有反应。并且导致以太网PING不通。如图2当把cpu0启动cpu1的函数rt_hw_secondary_cpu_up()注释
    发表于 04-20 15:30

    使用一维位置传感器测量第二个

    使用我们的电感式位置传感器LX3302A,您可以添加第二个轴的测量。在描述如何完成之后,我们将介绍在您的两轴传感器设计中实现它的步骤。
    的头像 发表于 04-20 09:30 1047次阅读
    使用一维位置传感器测量<b class='flag-5'>第二个</b>轴

    带有MCIMX8-8X-BB的MCIMX8QM-MEK上的第二个PCIe端口停止工作了要怎么处理?

    带有 MCIMX8-8X-BB 的 MCIMX8QM-MEK 上的第二个 PCIe 端口在恩智浦最新的 Linux BSP LF5.15.52_2.1.0(2022 年 9 月)中停止工作。我尝试
    发表于 04-17 08:55

    如何使用ESP32并添加第二个无线电模块?

    我需要能够同时连接到 Wi-Fi 和蓝牙。我想使用 ESP32 并添加第二个无线电模块。我的想法是 ESP 32 将处理 Wi-Fi 连接,然后模块将直接连接到蓝牙扬声器。我最初使用的是 Wemo
    发表于 04-12 07:37

    第二个以太网在imx8qm中不工作怎么解决?

    你好 Toradex 团队,我有 som-IMX8QM 和 Android 操作系统。我目前正在努力建立第二个以太网(fec2)。我无法连接到互联网。第二个以太网 phy 是 KSZ9131RNXI
    发表于 04-10 09:16

    如何为iMX8 LVDS1添加第二个帧缓冲区?

    我想知道如何在 iMX8 上设置第二个帧缓冲区。我正在使用带有两不同尺寸屏幕的 imx8qm-mek,其中每个屏幕都通过 LVDS 连接到 HDMI 转换器。第一屏接lvds0,第二屏接im8qm
    发表于 04-10 08:34

    ROM bootloader在什么情况下会加载并启动第二个副本?

    想知道如何使用 FCB 中的“firmwareCopies”字段和“firmwareInfoTable”?基本上,想知道 ROM 引导加载程序是否会加载并启动第二个副本(如果有的话)?如果是,ROM bootloader 在什么情况下会加载并启动第二个副本?
    发表于 04-03 06:53

    LX2160A第二个RCW源引导失败到底会发生什么?

    详细的上电复位描述(4.9.5,表 11,第 13 阶段)中指出可以使用第二个 RCW 源如果服务处理器检测到 RCW 加载失败,它会从第二个 RCW 源启动 RCW 加载。如果从偏移量 0 或
    发表于 03-29 08:20