固件和操作系统有什么区别?

20
在嵌入式设备(例如打印机、交换机)中,我对固件与操作系统之间的区别感到困惑。嵌入式设备的操作系统是否类似于个人电脑上的操作系统(如Linux和Windows)?
例如,我有一台打印机,它有一个嵌入式Web服务器,可以让我远程管理打印机。当我打开制造商的网站时,我发现该操作系统是:OS 9.86。这是什么类型的操作系统?请参见:Phaser 8560 Support & Drivers

4
对于许多嵌入式系统,“固件”已成为一个模糊或包容性的术语,指任何存储在非易失性存储器(特别是闪存)中的所有代码/数据/文件系统。例如,DD-WRT项目将包含Linux内核、文件系统和应用程序的二进制映像称为可下载的一个固件项目。 - sawdust
6个回答

12

简单来说:

操作系统(OS)

包含内核,图形用户界面(GUI)或至少一个使用硬件进行文件管理的命令行界面(CLI)。

内核

是操作系统软件的一部分,是操作系统与硬件之间的门卫和翻译器。

换句话说(来自维基百科),内核的主要功能是调解对计算机资源的访问:

  • -CPU
  • -RAM
  • -I/O
  • -系统调用

固件

  • 按定义,固件是存储在只读存储器(ROM)上的任何指令。
  • 固件是介于软件和硬件之间的东西,参考了“易于修改”这个方面的光谱。
  • 固件独立于操作系统,一个模糊了界限的例外是整个操作系统存储在ROM中,因此根据定义被视为固件。
  • 固件通常包含引导程序,用于加载操作系统内核。
  • 固件是编排多个通用硬件组件所需的最低指令。
  • 如果您使用VLSI完全自定义/打印逻辑/指令到自己的电路上,则不需要固件(我认为在谈论固件时这很重要)。
  • 固件在消费品中普遍存在,例如无线电控制模型,但操作系统并非如此。
  • 固件存在于几乎所有电子产品中,而操作系统并非如此。
  • 固件中的病毒可能永远无法被检测或清除。 操作系统上的病毒可以通过重新安装来清除。

当您开启计算机时:

固件→内核→完整的操作系统

基本上


11

固件是指存储在非易失性内存中的一小段代码。在如今常见的硬件外设中(例如打印机、VoIP电话等),固件通常负责加载(例如操作系统代码签名验证)和管理(例如在恢复模式下刷新操作系统)安装在设备上的操作系统。而实际的任务(例如打印)则由操作系统来执行。

硬件供应商通常使用Linux的派生版本(例如Cisco IOS)或实时操作系统(例如VxWorks)。


10

正如其他人所指出的那样,固件是存储在设备中的非易失性内存中的指令。它包含设备在断电或重置时启动执行的指令。这可能是设备上的全部软件,或者它可能包含跳转到某个其他组件上的指令,例如PC的BIOS会导致处理器读取硬盘驱动器(或软盘或CD-ROM)上的第一个扇区,以发现下一步要运行的代码。

操作系统是在设备上运行的代码,为应用程序提供访问设备功能的服务。例如,它可以提供时间片分配处理器、文件系统进行访问、输入和输出等。

嵌入式设备不需要为应用程序提供操作系统,但对于制造商编写软件来说,这可能是一个合适的模型。一个打印机可能将所有固件放在一个正在运行的程序中,带有一些中断处理程序,而无需将Web服务器与操作系统分开。我不知道这个特定型号的情况。

关键是操作系统可以存在于固件中,固件也可以存在于没有操作系统的情况下。它们是独立的概念。


3

固件:

任何设备(计算机、打印机、扫描仪、数码相机等)启动时,都需要一个初始程序来运行。这个初始程序称为固件,也称为引导程序BIOS,它被装在只读存储器(ROM)中(一种非易失性存储器,其内容是永久的)。

固件定位操作系统的内核(记住,内核是操作系统的一部分),并在启动时将其加载到主存储器(RAM)中。固件通常使用汇编语言或高级语言(如C / C ++)编写。

操作系统:

操作系统是完整的软件堆栈,管理计算机的硬件并设置应用程序运行的环境。换句话说,操作系统执行设备的指定任务。软件堆栈的底部是内核,它会持续运行,只要你的设备开机并运行。当我说操作系统管理硬件时,实际上是内核管理对硬件资源(CPU、内存、输入和输出)的任何请求。


1

为了延续其他人的发帖内容:

固件不仅仅是引导程序或BIOS,尽管这是大多数消费设备中该术语的常见用法。

在更复杂的应用中,现场可编程门阵列(FPGA)、复杂可编程逻辑器件(CPLD)和其他类似技术提供了一种创建可配置逻辑电路的机制,可以远远超出微控制器或更大处理器运行的线性可执行代码。这通常是应用特定集成电路(ASIC)的替代方案,因为在芯片布局完成后无法更改。

在这种应用中,固件所做的远不止加载代码以启动事物。应用程序可以被设计来处理多个并行操作,包括但不限于地址路由、信号处理、数学协处理、计时器、电源和复位序列,甚至LED和继电器控制。

创建自定义设备的可能性是无限的,并且在FPGA和CPLD的情况下,可以重新编程。

上述类型的固件通常是用VHDL编程,它描述同步或异步并行逻辑以表示所需功能。设计通常布局为通过内存映射地址范围或通过某些其他协议(例如PCI / PCI-X / PCIe)可由软件访问。固件设计创建的寄存器表示所需功能的一组控制和状态。
另一方面,操作系统为软件提供与某些处理环境(即提供上下文和“规则”来利用处理器和任何可访问的硬件或固件)的接口。操作系统可以作为固件中的处理规则布置,或者(更常见地)它只是从ROM、闪存或其他媒体加载的软件。
操作系统与硬件之间的机器无关部分之间的接口有许多形式:板支持包(BSP)、驱动程序等。BSP通常是设置处理器和板特定外设地址的地方,以及其他一些事情。许多实时操作系统(RTOS)供应商提供一些基本的BSP设置和/或工具来启动事情。
一些设计师会将BSP设计简单化以使事情开始运转,并独立编写许多接口以独立于RTOS BSP协议来访问硬件或固件;这在定制固件中更为普遍。
是的,嵌入式设备操作系统与个人电脑相似。区别在于它们都基本上按同样的方式工作,并为应用程序提供执行上下文以操作某些外设。至于打印机中实际使用的操作系统类型?没有足够的信息可以确定(他们只公布了版本号为9.86...可能是定制的,也可能是任何一个RTOS或GPOS);此外,不清楚列在固件中的操作系统是否实际包含在该下载中,或者只是与兼容性有关的注释。
希望这有所帮助!

0
固件是一种占用全部硬件资源的应用程序。换句话说,没有操作系统能够在系统上动态加载应用程序。应用程序本身就是操作系统。应用程序操作硬件的所有资源。因此,应用程序与硬件极其集成,几乎无法跨硬件使用。这就是为什么应用程序被称为固件:软件被固定到指定的硬件上。
例如,空调上的固件控制着指定的压缩机和指定的控制面板。因此,该固件将无法在其他空调型号上运行。(当然,该固件也无法在其他电器上运行)固件极度依赖于硬件。
最初,固件被定义为“固件存储在ROM、EPROM或闪存等非易失性存储器件中”。但这个定义已经过时了:如果您在计算机上使用固态硬盘(SSD),那么整个计算机都只有固件而没有任何软件。
从我的角度来看,没有基于嵌入式Linux的固件,或者当您使用SSD时,您应该将所有软件都称为固件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接