本文提及的 Qualcomm 产品由 Qualcomm Technologies, Inc.和/或其子公司提供。
作为一名嵌入式开发者,生活里从来就没有过无聊的时刻。他们往往要使用架构迥异的操作系统,为具有各种软件栈的不同类型平台进行开发。
如果您浏览过Qualcomm.com和Qualcomm开发者网络,可能会注意到,我们的很多解决方案都支持 Android 或 Linux,甚至两个都支持。由于这两种操作系统在今天的嵌入式设备开发中十分普遍,因此,有必要了解一下各自的优势及最佳使用场景。下面我们来详细讨论一下。
Linux – 一种跨越多代设备,具有较长历史的操作系统
Linux最早于1991年发布,是从 Unix 演变而来的开源操作系统。最初是为个人电脑开发的,后来逐渐进入了许多不同的平台。其底层架构基本上是模块化和可定制的,开发者可以根据自己的需求定制操作系统。比如,如果在无显示器设备上运行操作系统,减少内存和处理需求,则可以移除 GUI 子系统。因此,Linux很早就在各种嵌入式设备上可靠运行——从游戏机和电视到移动路由器和工业自动化。
下图是Linux堆栈简化图:
简化的Linux堆栈
内核空间是操作系统的核心,而用户空间则托管开发者构建的应用程序。内存有限的低功耗设备(例如小型专有物联网设备)运行 Linux 也能实现较高的性能(经过适当定制后)。这使得 Linux 很适合用于资源受限的嵌入式设备,可以利用有限的处理能力及外围设备。
经过多年的发展,出现了各种不同版本的 Linux 和发行版,包括一些为嵌入式系统量身定制的版本,以及配备定制软件栈的其他版本。例如,LAMP(Linux、Apache、MySQL、PHP/Perl/Python)栈包含用于带有数据库后端的Web服务器组件。有一个网站:DistroWatch.com提供有关公开发行版的新闻和资料。
Linux 开发者可供选择的语言很多——从低级语言(如C/C++)到高级语言(如Java 和 Python)。过去,C语言因为用于实现操作系统,因此一直较为流行。得益于开源,开发者不会受发布版本路线图(如Android)的束缚,更容易地将操作系统的更改、修复和定制推送到更广泛的开发者社区,同时自己也受益于其他开发者的贡献。
我们有几款SoC支持Linux,包括Qualcomm机器人RB3开发工具包、Qualcomm机器人RB5开发工具包和骁龙660入门工具包。在软件方面,我们推出的部分SDK提供 Linux 运行时支持,如Qualcomm神经处理SDK和开源Gstreamer 插件(请参阅CodeAurora上的存储库)。其他工具,如我们的Qualcomm Hexagon DSP SDK和骁龙 Profiler,包括可以在Linux开发机器上运行的工具。
Android – 伴随移动设备成长起来的 Linux 版本
Android是基于 Linux 的定制版本,主要针对带有触摸屏的移动设备而设计,于2007年推出。目前由开放式手机联盟开发,并由Google提供商业赞助。
今天,Android 正在进军新的垂直领域,包括汽车、医疗设备和家用电器。因此,您会发现,我们的几种面向移动和多媒体的硬件解决方案(例如,骁龙 8 Gen 1移动硬件开发工具包和TurboX SDW4100 开发工具包)是专门针对Android的,还有我们的一些专门面向媒体的物联网产品,如Qualcomm QCS8250和Qualcomm APQ8016E应用程序处理器。
Android开发者通常使用基于Java、Kotlin和Python等语言的高级开发栈,但也可以选择使用C/C++等低级语言构建应用程序。这些选项也体现在我们的SDK中。例如,我们的Hexagon DSP SDK提供了一个低级 C API,可用于在裸机层面与DSP进行配合。同时,我们的Qualcomm人工智能神经处理SDK包括C++和Java运行时,以及基于Python的管道操作工具(例如,将ML模型转换为骁龙的专有格式)。
下图总结了Android的软件栈:
Android 软件栈
Android 已经为低功耗和移动网络通信进行了优化,这些能力通过我们的SoC设计(如异构架构、5G/Wi-Fi功能等)和我们丰富的SDK又得到了强化。此外,还包括许多高级功能(例如,手势识别),开发者可以通过 Android 的高级 API 访问这些功能。
虽然 Android 的底层内核是基于Linux的,但更高的层是面向移动设备功能的(例如蓝牙、OpenGL ES等)。从Linux的角度来看,Android的软件层(从硬件抽象层(HAL)开始)是在用户空间中运行的。
Android 拥有集成连接管理器,可无缝支持多个无线连接协议。它还内置电话栈,支持GSM、LTE和VoIP等技术。
Android的内置功能需要大量内存和强大的处理器。其应用程序通常会占用较多的内存,而且此操作系统一般不太容易定制(或者在实践中不像Linux那样方便)。这使得Android更适合用于丰富的多媒体设备,比如骁龙设备,而不是资源有限的嵌入式设备。当然,也有例外,比如TurboX SDW4100 开发工具包,它是为构建基于Android的小型可穿戴设备而设计的。
Linux和Android概述
Linux 和 Android 因为最初的设计意图和目标平台,而各有优势。我们提供支持其中一种或两种操作系统的硬件和软件解决方案(例如,我们的Qualcomm QCS610和Qualcomm QCS410应用处理器,可以同时运行在Linux和Android上)。
如果您希望为您接下来的嵌入式开发项目选择操作系统,可以参考以下表格:
Linux和Android关键特性和功能概述。
Linux | Android | |
目标设备 | 从PC到资源受限的嵌入式设备 | 面向拥有更多内存和处理能力的多媒体设备 |
主要信道 | 以太网和Wi-Fi | 移动网络 |
易于使用 | 需要OS定制方面的知识 | 开发通常较容易;堆栈包括大多数Android设备开发所需的一切工具 |
初级编程水平 | 一般是低级语言(C/C++),也可选择高级语言(如Java和Python)。 | 一般是高级语言(例如Java),也有低语言(C/C++)选项 |
引导加载程序 | 可自定义的标准引导加载程序 | 简单引导加载程序,在内核控制之前仅执行必要任务 |
硬件驱动 | 大部分开源 | 大部分私有–可能需要定制开发 |
许可 | 开源,GPL V2.0 | 开源,Apache |
有关这两个操作系统的特性和功能方面更全面的总结,请查看Embedded Inventor的这篇文章。
关于Linux或Android嵌入式设备开发的例子,请查看我们的QDN项目页面链接,该页面已经设置过滤,仅显示基于Linux和Android的项目。
骁龙、Qualcomm RB3和RB5机器人开发套件、Qualcomm Hexagon、Qualcomm神经处理SDK、Qualcomm APQ8016E、Qualcomm QCS8250、Qualcomm QCS610和Qualcomm QCS410是Qualcomm Technologies, Inc.和/或其子公司的产品。