1. 起因
最近搞嵌入式,接触到了固件(Firmware)这个词。问了一下元宝,它的回答很官方,感觉是那么回事,但是让我自己说,又说不来个所以然来,于是自己就开始揣摩。
2. 揣摩
经过一段时间揣摩,然后接触了一次刷固件的过程,灵光一闪,有种茅塞顿开的感觉。
一般一个嵌入式板子上面,需要用到很多专用芯片。这些专用芯片,一般来说出厂以后,里面的程序就是固定的,基本上不会修改了。所以呢,一般这种专用芯片,在正常工作的情况下,芯片内的程序是不会被修改的,因为它对主控芯片的接口一般都是做一些数据交互,并没有提供更新芯片内部程序的接口。
如果确实想要修改怎么办?办法是有的,只能使用某种专用软硬件工具,把程序烧写到专用芯片的内部存储中。通常内部存储种类有Flash,EEPROM等ROM存储。
讲到这里,大家应该都明白了。固件这个“固”字,是指在正常使用情况下,大部分专用芯片的程序一般无法修改,程序相对固定。而单片机这种东西,我们在开发的时候,是需要频繁烧写程序的,所以单片机里的程序,相对于开发者来说,叫固件就不合适了,叫软件更合适。如果我们想要修改芯片内的程序,一般来说,需要用专门的工具,当然还要有新的程序,把新的程序烧写到芯片中替代老的程序的过程,叫“刷固件”。刷固件一般需要把芯片给拆下来,放到专门刷固件的工具中,进行烧写。
但是呢,技术在发展,有的芯片厂商为了使用方便,在已有通信接口的基础上,增加了直接刷固件的接口。如此一来,主控芯片,一般是单片机的CPU,就可以在不把芯片拆下来的情况下,通过厂家提供的接口来刷固件。这个过程呢就叫OTA升级。
3. 结论
综上呢,固件是一个相对的概念,它是指在正常使用过程中,一般不会被修改的程序。对开发者来说,某些第三方的芯片里面的程序,就是固件;对电子产品的用户来说,电子产品里面的程序需要专业人员才能修改,所以电子产品内部的程序,对用户来说也叫固件。如果用户可以自由下载程序,更新程序,修改程序,那么这种程序就更偏向于被称作软件。技术在发展,固件也可以通过比较方便的方式进行升级,比如说通过连接网络就可以升级。这种升级方式就叫做“OTA升级”。