如果固件是CS概念,则如何定义?

529

我在理解术语“固件(作为一种软件)”时遇到问题;
如果这是一个CS概念,那么最好在这里询问一下,以获得一个正式的定义和一个我的错误的更正,作为一种解决方案。

我从理查德·斯托曼(Richard Stallman)的不同演讲中回想起固件通常是一种非免费软件,因此其源代码(或我认为是编译代码)嵌入了硬件,因此无法根据需要进行研究和更改(因此也无法删除)。
这使我感到困惑,其方式如下:

如果固件是不是“虚拟地”存储在内存中而是作为硬件架构嵌入到硬件中(“以金属形式写入”)的软件,那么如何像在Bios升级中一样进行升级却从未删除过呢?
例如,我可以在内核中升级Apple iphone的OS,但从不删除它,我误会了原因。

吉勒斯“别再邪恶了”

“固件”是一个相当模糊的概念。算作固件和不算固件之间的确切界限取决于上下文。

固件通常是代码,而不是主要操作系统,也不是在主要操作系统之上运行的软件。但是这个定义留下了一些回旋余地。

在计算机外围设备的上下文中,驱动程序相对的固件具有精确的定义:驱动程序作为主操作系统的一部分在主处理器(CPU)上运行,而固件在辅助处理器(GPU,磁盘控制器)上运行,网络控制器,...)。此类外围设备的固件可以随外围设备一起提供并存储EEPROM或闪存,或者驱动程序可以将其加载到外围设备的RAM中-这取决于外围设备是否具有持久性存储器。如果外围设备未提供固件,则通常以“二进制二进制文件”的形式出现,制造商没有记录。

在其他情况下,固件也可以表示在主处理器上运行的代码。固件是在比操作系统低一些的级别上运行的软件。或者,如果您是固件或操作系统开发人员,则您的软件可能是其他人的固件,而其他人的固件是您的软件-固件位于堆栈中的软件之下,但范围取决于您与谁交谈。例如,OS开发人员通常将BIOS和UEFI视为“固件”,但便携式UEFI实现的开发人员可能会将其软件视为运行在硬件制造商制造的固件之上的应用程序。

固件的另一个可能定义是它与硬件一起出售,而不是以后可以安装的软件。但是在如何应用此定义方面存在一些不一致之处。通常在手机上将操作系统称为“固件”,而不是在PC上。

升级或修改固件的难度取决于硬件制造商提供的工具以及对其施加的限制。对于具有持久性存储的外围设备,用于升级固件的接口可能会(也可能不会)记录在文档中,并且可能会或可能不会在该操作系统或该操作系统的驱动程序中实现。对于自主设备,可以通过某些图形界面(在电话或某些路由器上升级OS)来升级固件,也可以在某些外部硬件和软件的帮助下(例如,连接右侧的USB软件狗)进行固件升级。格式,连接到JTAG端口或拉出EEPROM芯片)。

使用非开源固件(无论定义如何)的原因纯粹是出于社会考虑:没有技术原因可以使固件比其他任何类型的软件都少开源。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如果定义了变量,如何添加列表元素“cs_instance 中的标签”

来自分类Dev

概念定义的放置如何改变程序行为

来自分类Dev

如何将 rtl8723be 固件内置编译到自定义 linux 内核中?

来自分类Dev

下述概念如何在C ++ 14中定义?

来自分类Dev

如何定义返回布尔值的函数的概念

来自分类Dev

如何定义可以结构化绑定的对象的概念?

来自分类Dev

您如何检测固件版本

来自分类Dev

如何安装.sfw固件文件?

来自分类Dev

问:如何正确更新固件

来自分类Dev

如果不允许pop cs:ip,ret如何工作

来自分类Dev

NodeMCU自定义固件问题

来自分类Dev

如果EF 5如何定义自定义命名约定

来自分类Dev

如何更改正在使用的wifi固件

来自分类Dev

如何使debian查看非免费的固件文件?

来自分类Dev

如何访问UEFI固件设置?(又名BIOS)

来自分类Dev

如何恢复路由器的原始固件?

来自分类Dev

如何在Zenbook中找到丢失的固件?

来自分类Dev

如何更改正在使用的wifi固件

来自分类Dev

如何从 .exe 文件安装固件更新?

来自分类Dev

如何在Codeigniter 3.0中自定义主模板概念?

来自分类Dev

如何使用Linux中的设备固件更新(DFU)文件更新USB设备上的固件?

来自分类Dev

如果输入数组定义为const,如何对它进行排序?

来自分类Dev

如果以后需要定义函数,该如何使用?

来自分类Dev

如果值未定义,如何从嵌入中删除字段?

来自分类Dev

如果找不到定义,如何包含某些内容

来自分类Dev

如果Y已经在播放,如何定义播放Z的按钮?

来自分类Dev

如果未定义,如何获取PKEY_Device_FriendlyName

来自分类Dev

如果找不到值,如何自定义 Laravel WhereBetween

来自分类Dev

如果 Firebase 值为 nil,如何定义次要值

Related 相关文章

  1. 1

    如果定义了变量,如何添加列表元素“cs_instance 中的标签”

  2. 2

    概念定义的放置如何改变程序行为

  3. 3

    如何将 rtl8723be 固件内置编译到自定义 linux 内核中?

  4. 4

    下述概念如何在C ++ 14中定义?

  5. 5

    如何定义返回布尔值的函数的概念

  6. 6

    如何定义可以结构化绑定的对象的概念?

  7. 7

    您如何检测固件版本

  8. 8

    如何安装.sfw固件文件?

  9. 9

    问:如何正确更新固件

  10. 10

    如果不允许pop cs:ip,ret如何工作

  11. 11

    NodeMCU自定义固件问题

  12. 12

    如果EF 5如何定义自定义命名约定

  13. 13

    如何更改正在使用的wifi固件

  14. 14

    如何使debian查看非免费的固件文件?

  15. 15

    如何访问UEFI固件设置?(又名BIOS)

  16. 16

    如何恢复路由器的原始固件?

  17. 17

    如何在Zenbook中找到丢失的固件?

  18. 18

    如何更改正在使用的wifi固件

  19. 19

    如何从 .exe 文件安装固件更新?

  20. 20

    如何在Codeigniter 3.0中自定义主模板概念?

  21. 21

    如何使用Linux中的设备固件更新(DFU)文件更新USB设备上的固件?

  22. 22

    如果输入数组定义为const,如何对它进行排序?

  23. 23

    如果以后需要定义函数,该如何使用?

  24. 24

    如果值未定义,如何从嵌入中删除字段?

  25. 25

    如果找不到定义,如何包含某些内容

  26. 26

    如果Y已经在播放,如何定义播放Z的按钮?

  27. 27

    如果未定义,如何获取PKEY_Device_FriendlyName

  28. 28

    如果找不到值,如何自定义 Laravel WhereBetween

  29. 29

    如果 Firebase 值为 nil,如何定义次要值

热门标签

归档