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

Tim*_*Tim 21 firmware bootloader terminology

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

Law*_*ceC 18

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

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

区别并不完全清楚。某些(大多数)WLAN 卡需要加载固件才能开始运行。然而,通常设备上有一个微小的固件,它的工作是在操作系统启动设备时通过 USB 总线接受一个主要的“固件”,并在加载时移交控制权。大多数人会说所有这些都是固件。

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

CPU 安装在比以往任何时候都多的设备中,因此开发和允许在出现错误的情况下更新固件现在很重要,许多带有 CPU 的硬件设备都有固件更新接口,有时没有记录。

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

由于更简单更可靠的原则,固件通常不具备完整操作系统的所有功能。最简单的固件只是初始化最少的硬件,加载一个扇区或阻止存储设备并将执行交给它。这很容易编程,因此很容易验证为无错误。启动时固件中的错误尤其会给设备带来灾难。


Syn*_*ech 7

固件软件,除了不是存储在磁盘上,而是存储在EEPROM 中,该EEPROM通常可闪存以允许更新。

固件在某种程度上是一种操作系统,但限制性更强且用途单一,因为它仅用于控制该设备,而操作系统是通用系统,允许在多个硬件设备上运行任何类型的软件。

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


Wil*_*sum 4

界限可能有点模糊。

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

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

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

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

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

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

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

如果您使用 Iphone/Ipad 等嵌入式设备,固件在哪里结束,软件在哪里开始!?如果您认为 IOS 是固件,那么为什么不考虑 Windows 或类似的固件。

对我来说,这表明边界是任何设备的制造商或供应商允许您控制的地方,它实际上不是一个固定的东西/精确的科学。

例如,

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

更复杂的是 - 当我根据要求说时,这可能来自其他软件中的驱动程序

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

  • 为执行有限功能(例如运行 IOS)而购买的现成设备是固件,因为您不会(或不应)手动修改它。它内部可能包含其他硬件,但它作为一个设备呈现,您无需单独购买硬件,因此,任何可用的更新都将无形地更新所有内容(例如,电话,您无需手动更新 GSM 控制器、电源变量等,您刚刚获得的更新可能会修改这些内容)。

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

对我来说,我会说固件=设备上附带的软件,其中纯软件是作为数据购买的,但我相信其他人可能会说不同!