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

时间:2013-03-29 11:32:06

标签: operating-system embedded embedded-linux firmware web-operating-system

在打印机,交换机等嵌入式设备中,我很困惑固件和操作系统之间的区别。嵌入式设备操作系统是否与PC(Linux和Windows)类似?

例如,我有一台打印机,它有一个嵌入式Web服务器,允许我远程管理打印机。当我打开制造商网站时,我发现操作系统是:OS 9.86。这是什么类型的操作系统?请参阅:Phaser 8560 Support & Drivers

6 个答案:

答案 0 :(得分:8)

固件是指驻留在非易失性存储器中的一小段代码。在如今办公室中常见的硬件外围设备(例如打印机,VoIP电话等)中,固件通常负责加载(例如,OS代码签名验证)和管理(例如,在恢复模式下闪存OS)操作系统。安装在机器上。执行实际任务(例如打印)是操作系统的工作。

硬件供应商通常使用Linux衍生产品(例如Cisco IOS)或实时操作系统(例如VxWorks)。

答案 1 :(得分:8)

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

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

嵌入式设备不需要向应用程序提供操作系统,但这可能是制造商在编写软件时使用的合适模型。可以想象,打印机可以将一个正在运行的程序中的所有固件与一些中断处理程序一起使用,而无需将Web服务器与OS分开。我不知道那个特定的模型。

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

答案 2 :(得分:5)

用最简单的术语来说:

<强> OS

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

<强>内核

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

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

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

<强>固件

  • 根据定义,固件是存储在ROM上的任何指令。
  • 固件是用于软件和硬件之间的文字游戏,参考光谱以便于修改&#34;
  • 固件独立于操作系统一个模糊行的例外是整个操作系统存储在ROM中的时候,因此根据定义认为是固件
  • 固件通常包含加载操作系统内核的引导程序
  • 固件是编排多个通用硬件组件的最基本指令
  • 如果您使用VLSI完全自定义/打印逻辑/指令到您自己的电路上,则不需要固件(我认为这在谈论固件时很重要)
  • 固件适用于消费类产品,如RC汽车,操作系统不是
  • 固件是所有/大部分电子产品,操作系统不是
  • 可能永远无法检测或删除固件中的病毒。可以使用全新安装清除操作系统上的病毒

启动计算机时

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

基本上

答案 3 :(得分:1)

固件:

对于任何开始运行的设备(计算机,打印机,扫描仪,数码相机等),它应该有一个初始程序,以便在启动/启动时运行。此初始程序称为固件。它也被称为 bootstrap program ,也称为 BIOS 。它安装在 ROM (非易失性存储器,其内容为永久性)中。

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

操作系统:

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

答案 4 :(得分:1)

与其他人发布的内容相吻合:

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

在更复杂的应用中,现场可编程门阵列(FPGA),复杂可编程逻辑器件(CPLD)和其他类似技术提供了一种机制,用于创建可配置的逻辑电路,这些电路可以超越微控制器运行的线性可执行代码或更大的处理器。这通常是专用集成电路(ASIC)的替代品,在芯片铺设后不能改变。

在这些应用程序中,固件不仅仅是简单地加载代码来开始工作。应用程序可以设计为处理多个并行操作,包括但不限于地址路由,信号处理,数学协处理,定时器,电源和复位排序,甚至LED和继电器控制。

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

上述类型的固件(通常)用VHDL编程,它描述了表示所需功能的同步或异步并行逻辑。设计通常被布置为可通过存储器映射地址范围或通过一些其他协议(例如,PCI / PCI-X / PCIe)来访问软件。固件设计创建的寄存器代表所需功能的一组控制和状态。

另一方面,操作系统为软件提供在某些处理环境中起作用的接口(即,提供上下文和“规则”以利用处理器和任何软件可访问的硬件或固件)。操作系统既可以作为固件中的处理规则,也可以(更常见地)只是从ROM,闪存或其他媒体加载的软件。

操作系统的机器独立部分与硬件之间的接口有多种形式:board support package(BSP),驱动程序等.BSP通常用于设置处理器和板专用外设的地址除其他外。许多实时操作系统(RTOS)供应商提供了一些基本的BSP设置和/或工具来启动。

一些设计人员会保持BSP设计简单易用,并编写许多接口以实现独立于RTOS BSP协议的硬件或固件;这在定制固件中更为普遍。

是的,嵌入式设备操作系统与PC“相似”。区别在于频谱,但它们从根本上都是相同的,并为应用程序提供了在某些外设上运行的执行上下文。至于什么类型的操作系统实际上在打印机?没有更多信息就无法真正了解(他们只发布版本为9.86 ......可以是自定义的,可以是多个RTOS或GPOS中的任何一个);还不清楚固件中列出的操作系统是否实际上在下载中,或者只是与兼容性相关的符号。

我希望有所帮助!

答案 5 :(得分:0)

固件是占用整个硬件资源的应用程序。换句话说,没有能够在系统上动态加载应用程序的操作系统。应用程序是操作系统本身。应用程序操纵硬件的所有资源。因此,应用程序 与硬件极为集成,几乎无法跨硬件。这就是应用程序被称为固件的原因:软件已经完成了指定的硬件。

例如,空调上的固件控制指定的压缩器和指定的控制面板。因此,固件在其他空调型号上将无法工作。(当然,固件在其他设备上是不可行的)固件非常依赖于硬件。

最初,固件被定义为“固件保存在非易失性存储设备中,例如ROM,EPROM或闪存”。但是这个定义已经过时了:如果你在那台计算机上使用固态硬盘(SSD),你的整台计算机只能在固件内,但没有任何软件。

从我的角度来看,没有基于嵌入式Linux的固件,或者在使用SSD时应该将所有软件称为固件。