嵌入式技术论坛
直播中

24不可说

9年用户 7954经验值
擅长:电源/新能源
私信 关注

词汇解析|固件,你是软件还是硬件?

`
Embedded software that is stored as object code within a ROM. This name is most common among the users of digital signal processors.
固件是作为目标代码存贮在ROM中的嵌入式软件,这个名字在数字信号处理器的用户中相当流行。

固件是指设备内部保存的设备“驱动程序”,通过固件,操作系统才能按照标准的设备驱动实现特定机器的运行动作,比如光驱、刻录机等都有内部固件。

01.png
固件随着技术进步也在不断发展

固件是担任着一个系统最基础最底层工作的软件。而在硬件设备中,固件就是硬件设备的灵魂,因为一些硬件设备除了固件以外没有其它软件组成,因此固件也就决定着硬件设备的功能及性能。

通常这些硬件内所保存的程序是无法被用户直接读出或修改的。在以前,一般情况下是没有必要对固件进行升级操作的,即使在固件内发现了严重的Bug也必须由专业人员带着写好程序的芯片把原来机器上的更换下来。早期固件芯片一般采用了ROM设计,它的Firmware代码是在生产过程中固化的,用任何手段都无法修改。随着技术的不断发展,修改固件以适应不断更新的硬件环境成了用户们的迫切要求,所以,可重复写入的可编程可擦除只读存储器EPROM(Erasable Programmable ROM),EEPROM和flash出现了。这些芯片是可以重复刷写的,让固件得以修改和升级。

02.png
固件和硬件有同等重要的地位

硬件设备的固件与它的硬件有着几乎相等的地位,而在某些程度上来说固件可能更重要一些。因为只有编写出出色的固件程序才可以更加充分、巧妙的发挥硬件的作用,而且优秀的固件还可以弥补一些硬件上的缺陷。

固件既然是软件,就有大小之分,大的可有几百兆,小的也许只有几K,甚至不足1K。

03.png
如空气般存在的固件,很重要却多数时候感觉不到

为什么很多设备都没听说过有固件的说法呢?因为有些设备,在硬件上会出问题,而在软件上(即固件)永远都不会出问题,而且这些固件对于普通用户是无法更新的(或者更新的技术难度比较大)。它距离我们太遥远,所以被我们忽略掉而已。

对于独立可操作的电子产品,固件一般指它的操作系统(“担任着一个数码产品最基础、最底层工作的软件才可以称之为固件”,这和操作系统的定义很一致)。比如PSP的固件,就是指PSP 的操作系统。同理,IPHONE的固件也是其操作系统,路由器的固件就是路由器的操作系统,MP4的固件就是MP4的操作系统等。

而对于非独立的电子产品,比如硬盘、鼠标、BIOS、光驱、U盘等设备,固件就是指其最底层的,让设备得以运行的程序代码。

虽然以“固件”为名,但不管怎么说,它还是应当被我们理解为软件,并且由于目前集成电路的进步,升级固件也变得越来越简单,越来越没有危险,固件程序与我们通常所说的程序的区别已经越来越小。

虽然升级很简单,但是还是有些要点应该注意,因为毕竟升级固件是有一定风险性的,所以在升级前和升级中,要谨慎小心。

  1. 1.从设备的官网上阅读升级固件的教程,官网一般会有详细的说明。

  2. 2.固件文件和刷新固件的程序一定要从官方或者可信度高的论坛下载,不能从小网站下载,且一定要和待刷新的硬件型号完全吻合。

  3. 3.备份原有的固件,这可以防止在升级错误或者不满意新版固件时回退到原有版本。

  4. 4.保存新的固件文件,虽然多数产品都可以实现网络直接升级,但下载到计算机上再升级的可靠性要高得多。

  5. 5.关闭其他软件,为防止升级过程受到其它软件的干扰,最好暂时关闭不需要的软件,特别是杀毒软件。

  6. 6.在整个刷新过程中,绝对不可以断电,通常断电设备会损坏,需要送回原厂刷机。

  7. 7.在升级之前,禁用系统的屏幕保护及电源管理。
驱动和固件,我咋分不清?

驱动和固件(Firmware)都是代码,前者为软件服务,后者为硬件服务。操作系统概念还不明确的时代,二者是没有明显区别的。但是随着计算机体系结构的发展,硬件的种类开始变多,操作系统的种类也变多了。

这个时候,因为各种技术的、商业的原因,硬件厂商希望自己的硬件能被更多的软件厂商使用,所以就需要在硬件之上做一些封装,让自己的硬件操纵起来更容易,这个时候就要有Firmware这种东西了,它简化了软件与硬件的交互。

但是为什么不把Fimware做的很完美,做的不需要驱动支持呢?因为有不同的操作系统。不同的操作系统,对于操作硬件的方式完全不同,在Windows里应用态是无法直接写IO端口的,而在嵌入式系统里,一般都不限制直接操作IO端口。所以,硬件厂商一方面为了自己的硬件能被软件更简单的使用,就需要写Firmware,而另一方面为了兼容各种操作系统,又不能把Firmware写的太死,必须预留足够的余地让软件自由发挥——软件的自由发挥就是驱动。

不同操作系统的驱动是不能兼容的,原因就是驱动是为操作系统服务的,有的操作系统是单线程的,有些操作系统不允许动态申请内存,所以不同的操作系统要操作硬件,就要根据自身的特性编写对应的操作代码,这就是驱动存在的意义——适应系统需要。

假如世界上只有一种操作系统,并且版本永远不会改变,那么Firmware和驱动就可以融合在一起,但这只能一个不现实的梦想,要知道民用操作系统和工业控制操作系统差别是十分巨大的。


` 04.png

回帖(4)

jf_ed1027433

2017-4-14 10:30:14
刚刚给新买的路由器刷了华硕的固件。
举报

24不可说

2017-4-14 10:45:12
引用: ElecFans王岑 发表于 2017-4-14 10:30
刚刚给新买的路由器刷了华硕的固件。

这和你的头像展现的很相像,O(∩_∩)O哈哈~
举报

jf_ed1027433

2017-4-14 11:04:03
引用: 24不可说 发表于 2017-4-14 10:45
这和你的头像展现的很相像,O(∩_∩)O哈哈~

我这头像看起来像是冲过去给路由器刷固件吗?
举报

24不可说

2017-4-14 15:17:37
引用: ElecFans王岑 发表于 2017-4-14 11:04
我这头像看起来像是冲过去给路由器刷固件吗?

性格很像,不是行为动作
举报

更多回帖

发帖
×
20
完善资料,
赚取积分