我在理解术语“固件(作为一种软件)”时遇到问题;
如果这是一个CS概念,那么最好在这里询问一下,以获得一个正式的定义和一个我的错误的更正,作为一种解决方案。
我从理查德·斯托曼(Richard Stallman)的不同演讲中回想起固件通常是一种非免费软件,因此其源代码(或我认为是编译代码)嵌入了硬件,因此无法根据需要进行研究和更改(因此也无法删除)。
这使我感到困惑,其方式如下:
如果固件是不是“虚拟地”存储在内存中而是作为硬件架构嵌入到硬件中(“以金属形式写入”)的软件,那么如何像在Bios升级中一样进行升级却从未删除过呢?
例如,我可以在内核中升级Apple iphone的OS,但从不删除它,我误会了原因。
“固件”是一个相当模糊的概念。算作固件和不算固件之间的确切界限取决于上下文。
固件通常是代码,而不是主要操作系统,也不是在主要操作系统之上运行的软件。但是这个定义留下了一些回旋余地。
在计算机外围设备的上下文中,与驱动程序相对的固件具有精确的定义:驱动程序作为主操作系统的一部分在主处理器(CPU)上运行,而固件在辅助处理器(GPU,磁盘控制器)上运行,网络控制器,...)。此类外围设备的固件可以随外围设备一起提供并存储EEPROM或闪存,或者驱动程序可以将其加载到外围设备的RAM中-这取决于外围设备是否具有持久性存储器。如果外围设备未提供固件,则通常以“二进制二进制文件”的形式出现,制造商没有记录。
在其他情况下,固件也可以表示在主处理器上运行的代码。固件是在比操作系统低一些的级别上运行的软件。或者,如果您是固件或操作系统开发人员,则您的软件可能是其他人的固件,而其他人的固件是您的软件-固件位于堆栈中的软件之下,但范围取决于您与谁交谈。例如,OS开发人员通常将BIOS和UEFI视为“固件”,但便携式UEFI实现的开发人员可能会将其软件视为运行在硬件制造商制造的固件之上的应用程序。
固件的另一个可能定义是它与硬件一起出售,而不是以后可以安装的软件。但是在如何应用此定义方面存在一些不一致之处。通常在手机上将操作系统称为“固件”,而不是在PC上。
升级或修改固件的难度取决于硬件制造商提供的工具以及对其施加的限制。对于具有持久性存储的外围设备,用于升级固件的接口可能会(也可能不会)记录在文档中,并且可能会或可能不会在该操作系统或该操作系统的驱动程序中实现。对于自主设备,可以通过某些图形界面(在电话或某些路由器上升级OS)来升级固件,也可以在某些外部硬件和软件的帮助下(例如,连接右侧的USB软件狗)进行固件升级。格式,连接到JTAG端口或拉出EEPROM芯片)。
使用非开源固件(无论定义如何)的原因纯粹是出于社会考虑:没有技术原因可以使固件比其他任何类型的软件都少开源。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句