嵌入式设备与嵌入式系统开发概述

在 Secure Code Warrior,我们始终致力于扩展培训覆盖范围。为了赋能嵌入式开发人员和安全经理构建安全的嵌入式系统,我们正在深入探索嵌入式系统安全领域。在本文中,我们将分享开发人员和架构师在构建安全嵌入式系统时应了解的关键事项。
嵌入式设备是一种独立的计算单元,拥有基于微处理器的硬件和软件。它们通常用于执行专用功能,既可以独立运行,也可以作为大型系统的一部分。
什么是嵌入式设备和系统?
嵌入式设备是为特定目的而构建的计算系统,具有精简的硬件和软件,旨在执行特定功能。根据用途不同,嵌入式设备的复杂程度也会有所差异。
如果嵌入式系统需要执行复杂的资源密集型操作,其硬件可能包含多个处理器以及各种互连的外围设备。然而,如果它仅用于执行简单任务,则可能只包含一个微控制器。
有些嵌入式系统是没有任何用户界面的“黑盒”,而另一些则可能拥有详细的图形用户界面。
嵌入式设备示例
嵌入式设备的应用遍及多个行业,从航空航天到计算,从家用电器到医疗保健。以下是一些示例:
- 空调中的恒温器。
- 健身追踪器,它通过运行微型操作系统的微小电子元件,仅能记录并同步您的健康数据。
- 数字气候控制系统。
- 飞机导航系统。
- 数字手表。
- GPS 设备。
- 微波炉及其他消费电子产品中的 Wi-Fi 组件。
- 血压和心率监测仪。
- 核磁共振成像(MRI)机中用于向云端发送数据的网络组件。
笔记本电脑是嵌入式设备吗?
简短回答:不是。详细回答:
根据定义,嵌入式设备封装了执行其功能所需的所有软件和硬件。笔记本电脑确实将各种硬件组件封装在金属外壳中,并包含了实现其功能集所需的所有软件。
然而,与具有预定义、最小化功能集的典型嵌入式系统不同,笔记本电脑属于通用设备,可用于执行多种多样的活动。
物联网中的嵌入式设备
嵌入式系统是物联网的核心。您的智能冰箱之所以能通过移动设备控制,全靠嵌入式设备。正是安防系统中的嵌入式设备,让您能在千里之外查看闭路电视监控画面。当您按下按钮开启汽车自动驾驶功能时,幕后正是嵌入式设备在发挥作用。
嵌入式软件开发生命周期
嵌入式设备的典型软件开发生命周期包含以下步骤:
第一步:目标与需求
嵌入式设备具有独特且精确的功能集。因此,在开始开发之前,明确其目标和需求至关重要。建议为系统创建详细的设计文档,并回答以下问题:
- 该设备将执行哪些功能?
- 它是作为其他机器的一部分,还是独立运行?
- 设备是否需要用户界面?如果需要,命令行界面是否足够,还是需要图形用户界面?
- 设备必须满足哪些尺寸、成本或功耗限制?
- 是否有性能基准要求?例如,设备是否需要实时响应,或在特定阈值内完成响应?
第二步:系统架构
确定了独特的系统需求后,即可着手设计系统架构。请回答以下问题:
- 开发该设备需要哪些硬件组件?这包括确定电路、处理器芯片和微控制器,以及任何所需的内部和外部外设。
- 组件需要多少功耗?
- 设备是否需要连接互联网?
- 必须添加或开发哪些接口,以允许设备连接到其他设备或大型机器?
- 如何实现加密?(考虑算法、密钥存储等)
- 如何识别并规避潜在的漏洞、攻击和恶意软件?
第三步:选择操作系统
操作系统的选择往往决定了嵌入式应用的效能,因此请慎重选择。Windows for IoT 在图形处理方面表现出色,但缺乏硬件支持。嵌入式 Linux 和 Android 是免费的,而 VxWorks 和 Windows for IoT 则需要授权费用。
使用 Linux 和 Android 等开源系统,开发人员对内核拥有更大的控制权;而使用专有系统时,您只能使用内核默认提供的功能集。
在选择操作系统时,考虑安全性影响也同样重要。如果发现漏洞,安全补丁能否快速发布?系统是否内置了针对常见网络安全攻击的防护措施?
第四步:开发工具
不同的编程语言和框架各有利弊。根据您对功能、速度和可靠性的要求,您可以选择最适合的语言或框架。
如果您的应用基于 Web 且追求高性能,请选择 Java。
然而,如果您追求最快的吞吐量,请选择 C/C++。如果您需要最丰富的第三方库支持,请选择 Python。
第五步:编码、重构、测试与持续迭代
确定开发平台后,即可开始编码。请记住,嵌入式系统是硬件和软件资源受限的敏感设备。因此,遵循应用安全和性能方面的最佳实践至关重要。
代码审查有助于优化代码并识别潜在缺陷。此外,您还需要进行尽可能严格的测试。请务必汇总设备在生产环境中使用时可能遇到的所有测试用例,并进行详尽测试。
第六步:维护与支持
与任何其他应用或设备一样,生命周期并不会在嵌入式设备出厂和安装后结束。随着设备投入生产使用,新的应用场景会被发现,从而需要添加新功能。任何报告的缺陷也可能需要发布新的固件更新来修复。
主流嵌入式编程语言
IEEE 和 TIOBE 等许多知名机构都会根据流行度和使用率对编程语言进行排名。然而,无论您查看 TIOBE 指数还是 IEEE Spectrum,都会发现一个共同点。
排名前三的语言始终是 C、Python 和 Java。2021 年 7 月的 TIOBE 指数显示,C 语言排名第一,Java 第二,Python 第三。而根据 IEEE Spectrum 的嵌入式编程语言排名,顺序则为:Python、Java,然后是 C。
用 Java、C 或 Python 编写的固件有何不同?
不同的语言在内存管理、操作系统交互和运行时环境的处理方式上各不相同。例如,Java 应用程序是在一种称为 Java 虚拟机(JVM)的专用运行时环境中执行的。
C/C++ 的内存管理是手动的,而在 Java 或 Python 中,您无需担心内存管理问题,语言会自动为您处理。更重要的是,在 C 语言中,您必须自行进行垃圾回收;也就是说,如果您动态分配了一块内存,就必须显式地释放它,否则会导致内存泄漏。而在 Java 或 Python 中,垃圾回收是自动完成的。不过,C 语言在本质上比 Java 或 Python 快得多。
与 Python 相比,C 和 Java(尤其是 C)的一个不足之处在于第三方库的可用性。Python 拥有更丰富的库数据库,这使得开发人员能够更轻松地添加特定功能。
总的来说,如果满足以下条件,请选择 C:
- 您需要与操作系统和硬件进行底层交互。
- 您追求极致的性能。
- 您的开发人员精通 C/C++。
- 不需要太多的外部/第三方支持。
如果满足以下条件,请选择 Python:
- 您想要实现数据科学或机器学习算法。
- 您需要丰富的第三方库支持。
- 您可以接受以速度换取易用性。
- 您在嵌入式开发方面的经验有限。
- 您不需要与操作系统或硬件进行底层交互。
如果满足以下条件,请选择 Java:
- 您正在构建 Web 应用程序。
- 您希望开发难度比 C 低,但性能要求高于 Python。
- 不需要太多的外部/第三方支持。
C 语言会逐渐不再是嵌入式开发的首选吗?
高级语言通过抽象化 C 语言中不可避免的复杂性,降低了编码难度。然而,几十年来,尽管出现了更多花哨的语言和框架,C 语言在嵌入式开发中始终占据着首选地位。
这是因为 C 语言所提供的速度、性能和可靠性至今仍无可比拟。Python 以及 Java 生态系统的大部分内容(包括运行时、语言本身和编译器)都是用 C 语言编写的,这充分证明了该语言的高效性和持久性。
话虽如此,对于更喜欢 Python 等语言简洁性的新开发人员来说,C 语言确实更难学习。这导致 C 语言开发人员社区的规模出现了明显的萎缩。此外,人工智能和机器学习应用的兴起也促使人们选择 Python 而非 C,仅仅是因为它提供了更强大的库支持。
需要记住的是,Python 只是在最近才进入 顶级嵌入式编程语言 的讨论范畴。诚然,它的采用率在未来几年可能会继续上升,但我们预计 C 语言永远不会失去其在嵌入式开发中的核心地位。
为什么在 C/C++ 中进行安全编码至关重要
在编写 C/C++ 代码时,很多地方都可能出错。访问不再指向有效数据的内存地址,或在线程之间错误地共享数据,都可能导致整个应用程序崩溃。
对于嵌入式设备而言,这些影响更为严重,因为其中的崩溃可能导致大型机器停止运行。例如,如果汽车的自动驾驶模块关闭,汽车将无法避开障碍物。
以下是 C/C++ 应用程序安全编码至关重要的更多原因:
- 不安全的内存处理(空指针、内存损坏、栈溢出、缓冲区和堆溢出)会导致整个应用程序崩溃。
- 指针是 C 和 C++ 不可或缺的一部分。处理指针需要极其谨慎,并深入了解底层概念。
- 垃圾回收是手动的。这意味着程序员必须显式删除任何动态分配的内存。未释放或错误释放的内存可能导致内存泄漏或损坏。
- 缺乏用于高级数据结构(如哈希表、集合等)的标准化 API,这迫使开发人员不得不重复造轮子。
对开发人员进行 C/C++ 应用程序安全编码培训至关重要。Secure Code Warrior 提供了一个个性化学习平台,通过交互式挑战、课程和评估,助力开发人员编写安全的 C/C++ 代码。我们提供的是针对特定语言和框架的内容,而不仅仅是通用的概念性培训。
了解 我们如何助力汽车和交通行业。或者立即尝试 嵌入式专项编码挑战,亲身体验我们如何赋能开发人员编写安全的嵌入式应用程序!
在 AI 驱动的开发成果发布前实现有效治理
评估 AI 辅助风险,在提交代码时强制执行安全编码策略,并加速整个软件开发生命周期的安全交付。
探索更多博客
获取有关安全编码、人工智能治理和软件风险管理的专家内容。
%252520%252520(3).avif)
Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

Security as culture: How Blue Prism cultivates world-class secure developers
Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed
在产品发布前确保 AI 驱动的开发安全
洞察开发风险,执行安全策略,并在整个软件开发生命周期中预防漏洞。



.avif)