固件与软件:异同

理解固件与软件:深入解析其差异与相似之处

在现代嵌入式系统和计算机领域中,固件和软件是两个至关重要的概念。 随着世界加速数字化转型,计算机在各个领域扮演着日益重要的角色,软件和硬件成为了讨论计算机时最常见的术语。然而,除了软件和硬件之外,固件也是现代科技设备中不可或缺的一部分。

在电子产业中,固件和软件都非常普遍,但要区分它们可能会有些棘手,因为有时它们的目标似乎是相同的。举例来说,当手动安装安卓操作系统更新时,这实际上可以被视为一种固件操作。这意味着在你的安卓手机上刷新操作系统更新时,该软件是为了特定的硬件或固件而构建的。

如果这些概念让你感到困惑,不必担心,本文将对这些概念进行全面阐述。我将详细解释软件和固件之间的区别、相似之处以及一些实际应用场景。

让我们开始吧!

什么是固件?

在计算机世界中,固件被定义为一种特殊的计算机软件,它为任何设备的特定硬件提供底层控制。 固件包含了设备的基本功能,并且为更高级别的软件(如操作系统)提供了硬件抽象服务。对于那些较为简单的设备来说,固件承担了执行控制、监控和数据操作的完整操作系统角色。它通常存储在非易失性存储设备中,如 EPROM、EEPROM、闪存和 ROM 等。

“固件”这个词是由美国科学家 Ascher Opler 于 1967 年提出的。他用这个词来描述软件和硬件之间的微程序。

更新固件通常需要物理更换 ROM,或者使用特定的程序来重新编程 EPROM。 有些固件存储设备在安装后是无法更改的。 更新固件的主要原因包括修复错误、为设备添加新功能等。你可以将固件简单地理解为“硬件的软件”。尽管软件是另一个术语,但它们之间是相互联系的,却又不可互换。

设备制造商通常会定期发布固件更新,以保持硬件的正常运行,并使其与新的媒体兼容。网络路由器制造商也会发布固件更新以提升网络性能。智能手机、相机制造商等也是如此。 你只需访问制造商的网站就可以下载这些更新。

根据硬件集成程度的不同,固件可以分为三大类:

  • 低级固件:通常被认为是设备硬件的固有组成部分。 低级固件存储在只读和非易失性的芯片上,例如 ROM。 因此,它通常是不可重写或更改的。包含低级固件的设备通常采用一次性可编程存储器。
  • 高级固件:高级固件允许更新,但其复杂性要高于低级固件。它存储在闪存芯片中。
  • 子系统固件:它是嵌入式系统的一部分。一个典型的例子是服务器的电源子系统。电源子系统是一种半独立于服务器工作的硬件。

例如:BIOS 或统一可扩展固件接口 (UEFI)、USB 驱动器、传感器、小型计算机、智能卡等。

固件更新的工作原理

通常,固件更新的目的是为了防止固件被黑客攻击、提升安全性、修复错误、推出新功能以及与最新媒体进行交互。它包含了以新的或修改的方式指导硬件运行的代码。

一些联网设备会定期检查新的固件更新,然后自动下载并安装。然而,有些设备则需要用户访问官方网站下载并手动安装更新。更新的频率可能因设备的使用情况而异。智能设备中的固件可能不需要频繁更新。

智能手机通常会在软件更新的同时升级固件,以确保手机能够持续正常运行,而无需用户手动更新固件版本。许多电子设备在更新固件时也需要保持开机状态。

什么是软件?

软件是指用于执行计算机操作以完成特定任务的数据、程序或指令。它与硬件形成对比,硬件指的是计算机系统的物理方面。软件是无形的。

你也可以将软件看作是一个通用术语,用来描述在任何设备上运行的脚本、程序和应用程序。 因此,软件是计算机系统中可变的部分。 软件的主要类别包括:

  • 应用软件:指为满足特定的计算机需求或执行某些基本任务而设计的软件。
  • 系统软件:此类软件旨在运行设备的硬件,并为应用程序提供一个运行平台。
  • 编程软件:这种类型的软件为软件开发人员提供了编程工具,也包括中间件(位于系统软件和应用软件之间)。此外,还包括操作计算机设备和外围设备的驱动程序软件。

在 20 世纪 80 年代初期,软件通常以软盘的形式出售。 后来,出现了 CD 和 DVD 格式。如今,大多数软件都是通过互联网购买或直接下载的。 你可以从供应商的网站轻松找到各种类型的软件。

以下是一些软件设计类型:

  • 架构设计:这是软件设计的基础,它通过使用架构设计工具来定义系统的结构、主要组件以及它们之间的关系。
  • 高级设计:这是软件设计的第二层,侧重于系统的实现以及组成系统的模块(以软件堆栈支持的形式)。它还描述了系统的各个模块、功能以及数据流之间的关系。
  • 详细层:这是软件设计过程的第三层,重点关注特定软件架构的实现细节。

软件的质量可以通过多种特性来衡量,包括可访问性、兼容性、功能性、性能、可移植性、可安装性、本地化、效率、可维护性、安全性、可用性、可测试性和可靠性等。

软件的工作原理

所有的软件都为计算机提供数据和指令,以使其正常工作并满足用户的需求。如前所述,应用程序软件和系统软件的工作方式有所不同。

应用程序软件

应用程序软件包含许多为最终用户执行特定角色的程序,如浏览网站和撰写报告。它也可以为其他应用程序执行任务。尽管应用软件属于软件,但它不能独立运行。它需要计算机的操作系统和其他支持系统软件才能运行。

桌面应用程序安装在用户的计算机上,利用计算机内存来执行特定任务。它们占用硬盘空间,并且通常不需要互联网连接即可执行任务。

与之不同的是,Web 应用程序需要互联网连接才能运行。它们不依赖系统软件或硬件来工作。任何带有 Web 浏览器的设备都可以让用户快速启动 Web 应用程序。

系统软件

系统软件在应用程序软件和计算机硬件之间架起桥梁。它在后台运行并处理计算机的基本功能。它协调系统软件和硬件,以支持高级软件执行特定任务。

系统软件在计算机启动时开始工作,并且只要计算机系统处于运行状态,它就会持续运行。它通常使用低级机器代码或汇编语言编写。因此,它可以独立运行并确保计算机系统的正常运行。

固件与软件:相似之处

在嵌入式系统的背景下,固件和软件这两个术语有时是可以互换使用的。在嵌入式系统领域,它们存在一些相似之处。在某些方面,固件可以被认为是一种低级软件。

你甚至可能会看到一些招聘信息,其中会同时提及“嵌入式软件工程师”或“嵌入式固件工程师”,因为系统的应用端通常会与系统端一同开发。

例如,当使用裸机设计(没有操作系统)时,你通常只需要一些微控制器供应商特定的文件(支持驱动程序和头文件的 CPU)和一些第三方驱动程序(用于显示和 TCP/IP)。这些文件可以处理软件的硬件方面。

通过使用驱动程序和头文件,你可以编写应用程序软件;然后,所有文件会被合并成一个二进制文件。如果你使用 FreeRTOS 或 VxWorks 等操作系统,那么 RTOS 将负责内存管理和上下文切换。尽管如此,你仍然需要借助微控制器驱动程序、第三方驱动程序和 RTOS 文件来编写应用程序软件。

固件与软件:差异

让我们深入探讨固件和软件之间的一些关键差异:

特性 固件 软件
定义 一种控制硬件的软件,并定期更新。 一组用于计算机系统的指令。
位置 位于操作系统和硬件之间的低级软件。 位于操作系统之上,不直接与硬件交互。
类别 包括低级固件、高级固件和子系统固件。 包括应用程序软件、系统软件、编程软件、中间件和驱动程序软件。
大小 通常较小。 大小可变,可能是巨大的。
修改 通常设计为不被修改,只编程一次。 可以根据用户的喜好或需求进行定制或修改。
安装 一次性写入硬件闪存。 可根据需要多次安装和卸载。
存储位置 存储在硬件的闪存中。 存储在计算机系统的辅助存储设备中。
开发语言 使用低级编程语言开发。 使用高级和低级编程语言开发。
运行位置 直接在如EEPROMS和闪存等非易失性存储芯片上运行。 从可移动媒体(如 DVD、USB)复制,并安装在 SSD 或硬盘等存储设备中。
示例 计算机主板制造商提供的 UEFI 和 BIOS 固件,以及 OpenWrt 和 DD-WRT 等开源路由器固件。 Linux、Android、Windows 等操作系统,以及浏览器、应用程序、游戏、MS Office 等应用程序。

固件与软件:实际应用

固件的应用

你会发现固件广泛应用于各种计算设备中,包括复杂的设备。 以下是一些固件的实际应用:

  • 个人计算机:计算机的固件嵌入在一个小型存储芯片中。 计算机外围设备,如显卡等,也包含固件。
  • 家用电器:洗衣机和洗碗机等家用电器使用固件来与计算机进行通信,以实现配置和控制。
  • 存储设备:硬盘驱动器、便携式存储设备和 USB 驱动器都包含固件,以使其与计算机系统协同工作。
  • 智能卡:智能卡也包含固件,用于在芯片中嵌入指令,从而提供基本功能、加密和身份验证。
  • 汽车:车辆包含传感器、小型计算机和带有固件的嵌入式系统,以执行各种任务。
  • 移动设备:笔记本电脑、平板电脑、智能手机和其他移动设备都包含固件,使硬件能够与各种软件协同工作。

软件的应用

相信大多数用户都熟悉软件。无论他们在计算机或其他设备上安装或下载什么,都以软件的形式出现。它已经渗透到每个人的日常生活中,具有广泛的应用范围。

在应用软件方面,以下是一些示例:

  • 文字处理软件:如 MS Word、记事本和写字板等。
  • 电子表格软件:如 Microsoft Excel、Apple Numbers 等。
  • 数据库软件:如 MS Access、Oracle 等。
  • 模拟软件:如科学模拟器和飞行模拟器。
  • 企业软件:如客户关系管理系统 (CRM)。
  • 多媒体软件:如媒体播放器和 Real player。
  • 教育软件:如 Encarta、BritannicaMathematical、Google Earth、NASA World Wind 等。
  • 演示软件:如 Keynotes 和 Microsoft Powerpoint。
  • 信息工作者软件:如资源管理工具和文档工具等。
  • 应用套件:如 Microsoft Office、OpenOffice 等。
  • 内容访问软件:如 Web 浏览器、媒体播放器等。

在系统软件方面,以下是一些示例:

  • Windows、macOS 和 Linux 等操作系统。
  • 设备驱动程序。
  • 固件。
  • BIOS 和 UEFI。
  • 编程语言翻译器。
  • 实用工具。

结论

固件通常用于在大多数硬件中对嵌入式系统进行微编码,而软件则指的是更高级别的程序。 更换固件通常比较复杂,但对于软件而言,你通常不会遇到太多麻烦。

不过,固件是控制设备硬件的系统软件。 而软件作为一个整体,则是一组指令,允许你的计算机或其他设备执行各种任务。 希望通过本文的介绍,固件和软件之间的主要差异和相似之处现在已经很清楚了。

您可能还会对物联网 (IoT) 感兴趣。