Tim*_*Tim 21 firmware bootloader terminology
Law*_*ceC 18
传统上,固件是驻留在不可修改的 ROM 上的 CPU 代码,这是硬件设备启动和加载操作系统或选择的二进制(软件)所必需的。有时没有给出二进制文件的选择,而是使用一个附加到引导部分固件的二进制文件。
所有 CPU 都有一个经典问题,因为它们从内存中获取指令,因此当 CPU 启动时,某种预编程的内存必须存在于固定地址处,以便它可以在启动时自动执行某些操作。固件就是为此目的而存在的。某些固件还具有以后的程序可以用于服务的代码。BIOS 固件公开了 DOS 用于基本输入和输出的许多功能(因此 BIOS 代表基本输入输出系统)。
区别并不完全清楚。某些(大多数)WLAN 卡需要加载固件才能开始运行。然而,通常设备上有一个微小的固件,它的工作是在操作系统启动设备时通过 USB 总线接受一个主要的“固件”,并在加载时移交控制权。大多数人会说所有这些都是固件。
由于 EEPROM 和闪存变得越来越普遍,固件通常不再驻留在不可写的 ROM 中,而是驻留在闪存中并且可以修改。随着闪存的出现,固件和软件之间的区别在今天变得模糊。然而,多年来一件事没有改变,那就是 CPU 仍然是 CPU,需要一些代码或固件在启动时可见,然后启动。
CPU 安装在比以往任何时候都多的设备中,因此开发和允许在出现错误的情况下更新固件现在很重要,许多带有 CPU 的硬件设备都有固件更新接口,有时没有记录。
固件可用于加载操作系统。它可以包含引导加载程序或加载引导加载程序的代码。可以将操作系统映像存储在与固件相同的位置,并让固件的启动时代码加载操作系统(手机可以这样做)。PC BIOS 通常不包括引导加载程序。U-boot(不适用于 PC)是“文件系统感知”固件的一个例子,它可以直接加载操作系统。
由于更简单更可靠的原则,固件通常不具备完整操作系统的所有功能。最简单的固件只是初始化最少的硬件,加载一个扇区或阻止存储设备并将执行交给它。这很容易编程,因此很容易验证为无错误。启动时固件中的错误尤其会给设备带来灾难。
界限可能有点模糊。
软件通常是计算机可以执行的任何指令或例程。
固件通常是加载到硬件中/上的特定指令(软件),以便它们执行其功能。
我想说,几乎每个硬件都包含某种固件。
再说一次,我认为没有一个关于开始和停止位置的明确指南 - 所有固件都是为设备中的任何芯片编译的软件。
至于你关于什么是固件的第二个问题,我想说引导加载程序不是,但 BIOS 是,而 grub 不是。
这很难划清界限,但是...我的看法是 BIOS(现在的 EFI)是主板的固件,而硬盘驱动器有自己的固件。
因此,引导加载程序/grub 是纯软件 - 它可以使用硬盘驱动器执行任务,但实际上并不直接控制任何硬件。
如果您使用 Iphone/Ipad 等嵌入式设备,固件在哪里结束,软件在哪里开始!?如果您认为 IOS 是固件,那么为什么不考虑 Windows 或类似的固件。
对我来说,这表明边界是任何设备的制造商或供应商允许您控制的地方,它实际上不是一个固定的东西/精确的科学。
例如,
更复杂的是 - 当我根据要求说时,这可能来自其他软件中的驱动程序
现在,Ipad、Iphone 或任何其他嵌入式设备...
所以....总结一下...
对我来说,我会说固件=设备上附带的软件,其中纯软件是作为数据购买的,但我相信其他人可能会说不同!