固件和软件/操作系统之间有什么区别?


15
  1. 我想知道固件和软件之间有什么区别?
  2. 固件和操作系统之间有什么区别?
  3. 引导加载程序是固件吗?BIOS是。GNU grub呢?是grub软件还是固件?

Answers:


13

传统上,固件是驻留在不可修改ROM​​上的CPU代码,这是硬件设备引导和加载操作系统或所选的二进制(软件)所必需的。有时,没有给出二进制文件的选择,而是使用了连接到引导部分固件的二进制文件。

所有CPU都有一个经典的问题,因为它们从内存中获取指令,所以当CPU启动时,某种预编程的内存必须存在于固定地址上,以便它可以在启动时自动执行某些操作。为此存在固件。某些固件还具有供以后的程序用于服务的代码。BIOS固件提供了DOS用于基本输入和输出的许多功能(因此,BIOS为何代表基本输入输出系统)。

区别尚不完全清楚。某些(大多数)WLAN卡必须先加载固件,然后才能开始运行。但是,通常设备上有一个很小的固件,当操作系统启动该设备时,它的工作就是只通过USB总线接受主要的“固件”,然后在加载时交出控制权。大多数人会说所有都是固件。

由于EEPROM和闪存越来越普遍,因此固件通常不再驻留在不可写的ROM中,而是驻留在闪存中并且可以修改。如今,随着闪存的出现,固件和软件之间的区别变得模糊。但是,多年来,没有什么变化,那就是CPU仍然是CPU,并且需要一些代码或固件才能在启动时可见,以便启动。

CPU的设备数量比以往任何时候都要多,因此,开发和允许在出现错误的情况下更新固件非常重要,而且许多具有CPU的硬件设备都具有固件更新接口,有时没有文档说明。

固件可用于加载操作系统。它可以包含引导加载程序或加载引导加载程序的代码。可以将OS映像存储在与固件相同的位置,并让固件的启动时间代码加载OS(手机可以这样做)。PC BIOS通常不包括引导加载程序。U-boot(不适用于PC)是“文件系统感知”固件的一个示例,它可以直接加载操作系统。

固件通常不具有完整操作系统的所有功能,这是因为越简单越可靠。最简单的固件只需初始化最少的硬件,加载扇区或阻止存储设备并将其执行即可。这易于编程,因此易于验证为无错误。引导时间固件中的错误尤其会给设备带来灾难。


谢谢!作为两个控制设备,固件和设备驱动程序有何不同?
蒂姆(Tim)

对于诸如WLAN卡之类的设备:驱动程序构建为在硬件设备和操作系统本身之间建立接口。驱动程序在PC上运行。固件旨在通过总线(USB,IDE,PCI-E等)在硬件设备和驱动程序之间建立接口。固件在设备本身上运行。
LawrenceC

5

固件软件,除了存储在磁盘上以外,它存储在EEPROM中,该EEPROM通常可刷新以允许更新。

固件在某种意义上是一种操作系统,但由于它仅用于控制该设备,因此具有更多的限制和单一用途,而OS是一种通用系统,它允许在多种硬件设备上运行任何类型的软件。

不,引导加载程序不是固件,因为它们是磁盘上存在的软件。是的,BIOS是因为它存在于(可闪存)芯片上。不,GRUB也不是固件,因为它又不牢固(没有硬件组件),它是磁盘上存在的软件,尽管它可以(并且可以)安装在芯片上,在这种情况下,它可以是固件。


4
  1. 基本上,区别在于代码所在的位置。通常,固件被刻录到某种EPROM或嵌入式闪存中,而软件则存储在大规模存储设备中。

  2. 设备的操作系统可以驻留在固件或软件中。在PC上,固件(BIOS)仅提供软件OS(Windows / Linux / etc)可以利用的低层服务。在移动设备中,整个操作系统通常都在固件中。

  3. 根据(1)中的定义,计算机的BIOS是固件,但是驻留在硬盘上的引导程序是软件。


3

边界可能有点模糊。

软件通常是计算机可以执行的任何指令或例程。

固件通常是特定的指令(软件),它们被加载到硬件中/上以使其执行功能。

我会说几乎每个硬件都包含某种固件。

再说一次,我认为没有关于开始和停止的确切指南-所有固件都是针对设备中任何芯片编译的软件。

至于关于什么是固件的第二个问题,我会说引导加载程序不是,但是BIOS是,而grub不是。

这很难划清界限,但是...我的看法是,BIOS(现在为EFI)是主板的固件,而硬盘驱动器具有其自己的固件。

因此,bootloader / grub是纯软件-它可以使用硬盘驱动器执行任务,但实际上并不直接控制任何硬件。

如果您使用嵌入式设备(例如Iphone / Ipad),那么固件在哪里结束并且软件开始!如果您将IOS视为固件,那么为什么不使用Windows或类似操作系统呢?

对我来说,这表明边界是任何设备的制造商或供应商都可以控制的地方,而实际上这并不是一门固定的/确切的科学。

例如,

  • 主板用于引导-固件是BIOS,当它移交给下一部分时
  • 光盘驱动器和硬盘驱动器是用于读取/写入数据的组件,固件是根据要求执行此工作的部分。
  • 图形卡是用于显示图形的组件,固件是根据要求绘制输出的部分。

更复杂的是-当我要求时,它可以来自其他软件中的驱动程序

现在,一个Ipad,一个Iphone或任何其他嵌入式设备...

  • 可以购买现成的设备来执行有限功能(例如运行IOS)的设备是固件,因为您不(也不应)手动修改它。它可能在内部包含其他硬件,但是作为一个设备提供,您无需单独购买硬件,在那里,任何可用的更新都会无形地更新所有内容(例如,电话,您不手动更新GSM控制器,变量等等,您只需进行更新即可修改这些内容)。

所以...总结一下...

对于我来说,我要说的是固件=在购买纯软件作为数据的设备上附带的软件,但是我敢肯定其他人可能会说不同!


我希望这没问题...我发现这是一个非常有趣的话题,但是花了我半个多小时,这是非常早的一天/我很累...而且我并不总是很清楚最好的时光!...很高兴回答问题,我只是希望自己不要重复太多!
William Hilsum

0

我只想简单地给出一个答案。固件和操作系统对于任何数字系统的启动和正常运行都是非常重要的,我们将讨论两者的工作原理。假设我们已经关闭智能手机,然后在打开智能手机中的电源按钮后打开电源,此命令将转到BIOS芯片,该BIOS芯片是非易失性存储器,其中包含一些固件程序。此BIOS芯片固件开始工作,并且固件给出命令在两个方向上都向RAM和ROM发出命令ram从Rom删除操作系统代码,向ROM发出另一个命令以将其操作系统的副本复制到RAM以激活该系统的所有其他组件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.