![固件和软件/操作系统之间有什么区别?](https://linux22.com/image/1280184/%E5%9B%BA%E4%BB%B6%E5%92%8C%E8%BD%AF%E4%BB%B6%2F%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E4%B9%8B%E9%97%B4%E6%9C%89%E4%BB%80%E4%B9%88%E5%8C%BA%E5%88%AB%EF%BC%9F.png)
- 我想知道固件和软件之间有什么区别?
- 固件和操作系统之间有什么区别?
- 引导加载程序是固件吗?Bios 是。GNU grub 怎么样?grub 是软件还是固件?
答案1
传统上,固件是驻留在不可修改的 ROM 上的 CPU 代码,它是硬件设备启动和加载操作系统或所选二进制文件(软件)所必需的。有时不提供二进制文件选择,而是使用附加到启动部分固件的二进制文件。
所有 CPU 都存在一个经典问题,即由于它们从内存中获取指令,因此 CPU 启动时必须在固定地址处存在某种预编程内存,以便它可以在启动时自动执行某些操作。固件就是为此目的而存在的。某些固件还具有后续程序可用于服务的代码。BIOS 固件公开了 DOS 用于基本输入和输出的许多功能(因此 BIOS 代表基本输入输出系统)。
这种区别并不完全明显。一些(大多数)WLAN 卡需要加载固件才能开始工作。但是,设备上通常有一个很小的固件,其作用只是在设备由操作系统启动时通过 USB 总线接受主“固件”,并在加载时移交控制权。大多数人会说所有这些都是固件。
自从 EEPROM 和闪存变得越来越普遍以来,固件通常不再驻留在不可写入的 ROM 中,而是驻留在闪存中,并且可以修改。随着闪存的出现,固件和软件之间的区别如今变得模糊。然而,有一件事多年来一直没有改变,那就是 CPU 仍然是 CPU,并且需要一些代码或固件在启动时可见才能启动。
现在,CPU 所占的设备数量比以往任何时候都多,因此开发和允许在出现错误时更新固件现在是一件大事,许多带有 CPU 的硬件设备都有固件更新接口,有时是没有记录的。
固件可用于加载操作系统。它可以包含引导加载程序或加载引导加载程序的代码。可以将操作系统映像存储在与固件相同的位置,并让固件的启动时代码加载操作系统(手机就是这样做的)。PC BIOS 通常不包括引导加载程序。U-boot(不适用于 PC)是“文件系统感知”固件的一个示例,它直接加载操作系统。
固件通常不具备完整操作系统的所有功能,因为越简单越可靠。最简单的固件只是初始化最少的硬件,加载扇区或阻止存储设备并执行它。这很容易编程,因此很容易验证是否没有错误。启动时固件中的错误尤其会给设备带来灾难。
答案2
固件是软件,只不过不是存储在磁盘上,而是存储在电可擦除只读存储器通常可刷新以允许更新。
固件在某种程度上是一种操作系统,但限制性更强、用途单一,因为它仅用于控制该设备,而操作系统是一种通用系统,允许任何类型的软件在多个硬件设备上运行。
不,引导加载程序不是固件,因为它们是存在于磁盘上的软件。是的,BIOS 是固件,因为它存在于(可闪存的)芯片上。不,GRUB 也不是固件,因为它也不是固件(它没有硬件组件),它是存在于磁盘上的软件——尽管它可以(并且可能)安装在芯片上,在这种情况下会是固件。
答案3
界限可能有点模糊。
软件通常是计算机可以执行的任何指令或例程。
固件通常是加载到硬件中/硬件上以便执行其功能的特定指令(软件)。
我想说几乎每个硬件都包含某种固件。
再说一次,我认为没有一个明确的指南来告诉你从哪里开始和结束——所有的固件都是为设备中的芯片编译的软件。
至于您的第二个问题,即什么是固件,我想说引导加载程序不是固件,但 BIOS 是固件,而 grub 不是固件。
这很难划清界限,但是...我的看法是 BIOS(现在是 EFI)是主板的固件,而硬盘有自己的固件。
因此,bootloader/grub 是纯软件 - 它可能执行硬盘任务,但实际上并不直接控制任何硬件。
如果你使用 Iphone/Ipad 等嵌入式设备,固件在哪里结束,软件在哪里开始!?如果你认为 IOS 是固件,那么为什么不是 Windows 或类似设备呢。
对我来说,这表明界限是任何设备的制造商或供应商允许您控制的地方,而它实际上并不是一个固定的事物/精确的科学。
例如,
- 主板用于启动 - 固件是 BIOS,当它移交给下一部分时
- 光盘和硬盘是读取/写入数据的组件,固件是根据请求执行此项工作的部分。
- 显卡是显示图形的组件,固件是根据请求绘制输出的部分。
更复杂的是,当我说根据要求时,这可以来自其他软件中的驱动程序
现在,Ipad、Iphone 或者任何其他嵌入式设备......
- 现成的设备用于执行有限的功能(例如运行 IOS),因此您不会(或不应该)手动修改它。它可能包含其他硬件,但它作为一个设备呈现,您不需要单独购买硬件,因此,任何可用的更新都会以不可见的方式更新所有内容(例如,对于手机,您不需要手动更新 GSM 控制器、电源变量等,您只需要一个可以修改这些内容的更新)。
所以......总结一下...
对我来说,我会说固件 = 设备上附带的软件,而纯软件是作为数据购买的,但我相信其他人可能会说不同!
答案4
我想用几句话来回答。固件和操作系统对于任何数字系统的启动和正常运行都非常重要,我们将讨论这两者的工作方式。假设我们关闭了智能手机,然后我们打开智能手机,按下电源按钮后,该命令将发送到 BIOS 芯片,该芯片是一种非易失性存储器,包含一些固件程序。该 BIOS 芯片固件开始工作,固件向 RAM 和 ROM 发出双向命令,它向 RAM 发出命令以从 ROM 中取出操作系统代码,并向 ROM 发出另一个命令,将其操作系统的副本发送到 RAM 以激活该系统的所有其他组件。