Answers:
传统上,固件是驻留在不可修改ROM上的CPU代码,这是硬件设备引导和加载操作系统或所选的二进制(软件)所必需的。有时,没有给出二进制文件的选择,而是使用了连接到引导部分固件的二进制文件。
所有CPU都有一个经典的问题,因为它们从内存中获取指令,所以当CPU启动时,某种预编程的内存必须存在于固定地址上,以便它可以在启动时自动执行某些操作。为此存在固件。某些固件还具有供以后的程序用于服务的代码。BIOS固件提供了DOS用于基本输入和输出的许多功能(因此,BIOS为何代表基本输入输出系统)。
区别尚不完全清楚。某些(大多数)WLAN卡必须先加载固件,然后才能开始运行。但是,通常设备上有一个很小的固件,当操作系统启动该设备时,它的工作就是只通过USB总线接受主要的“固件”,然后在加载时交出控制权。大多数人会说所有都是固件。
由于EEPROM和闪存越来越普遍,因此固件通常不再驻留在不可写的ROM中,而是驻留在闪存中并且可以修改。如今,随着闪存的出现,固件和软件之间的区别变得模糊。但是,多年来,没有什么变化,那就是CPU仍然是CPU,并且需要一些代码或固件才能在启动时可见,以便启动。
CPU的设备数量比以往任何时候都要多,因此,开发和允许在出现错误的情况下更新固件非常重要,而且许多具有CPU的硬件设备都具有固件更新接口,有时没有文档说明。
固件可用于加载操作系统。它可以包含引导加载程序或加载引导加载程序的代码。可以将OS映像存储在与固件相同的位置,并让固件的启动时间代码加载OS(手机可以这样做)。PC BIOS通常不包括引导加载程序。U-boot(不适用于PC)是“文件系统感知”固件的一个示例,它可以直接加载操作系统。
固件通常不具有完整操作系统的所有功能,这是因为越简单越可靠。最简单的固件只需初始化最少的硬件,加载扇区或阻止存储设备并将其执行即可。这易于编程,因此易于验证为无错误。引导时间固件中的错误尤其会给设备带来灾难。
边界可能有点模糊。
软件通常是计算机可以执行的任何指令或例程。
固件通常是特定的指令(软件),它们被加载到硬件中/上以使其执行功能。
我会说几乎每个硬件都包含某种固件。
再说一次,我认为没有关于开始和停止的确切指南-所有固件都是针对设备中任何芯片编译的软件。
至于关于什么是固件的第二个问题,我会说引导加载程序不是,但是BIOS是,而grub不是。
这很难划清界限,但是...我的看法是,BIOS(现在为EFI)是主板的固件,而硬盘驱动器具有其自己的固件。
因此,bootloader / grub是纯软件-它可以使用硬盘驱动器执行任务,但实际上并不直接控制任何硬件。
如果您使用嵌入式设备(例如Iphone / Ipad),那么固件在哪里结束并且软件开始!如果您将IOS视为固件,那么为什么不使用Windows或类似操作系统呢?
对我来说,这表明边界是任何设备的制造商或供应商都可以控制的地方,而实际上这并不是一门固定的/确切的科学。
例如,
更复杂的是-当我要求时,它可以来自其他软件中的驱动程序
现在,一个Ipad,一个Iphone或任何其他嵌入式设备...
所以...总结一下...
对于我来说,我要说的是固件=在购买纯软件作为数据的设备上附带的软件,但是我敢肯定其他人可能会说不同!
我只想简单地给出一个答案。固件和操作系统对于任何数字系统的启动和正常运行都是非常重要的,我们将讨论两者的工作原理。假设我们已经关闭智能手机,然后在打开智能手机中的电源按钮后打开电源,此命令将转到BIOS芯片,该BIOS芯片是非易失性存储器,其中包含一些固件程序。此BIOS芯片固件开始工作,并且固件给出命令在两个方向上都向RAM和ROM发出命令ram从Rom删除操作系统代码,向ROM发出另一个命令以将其操作系统的副本复制到RAM以激活该系统的所有其他组件。