我为许多微控制器编写了固件,如8051,AVR和ARM。所以我清楚地了解固件是什么。
最近,当我更新我的Linux发行版时,我注意到有许多固件相关的软件包正在更新,例如iwl3160固件和iwl1000固件。他们的文件扩展名为.fw。
如果固件是一段代码,它被烧录到嵌入式控制器的非易失性存储器中,那么这些.fw文件在做什么?
它们是否在系统更新时实际上被烧入相应设备的非易失性存储器中,或者每次设备开启时它们都会动态加载到设备的易失性程序存储器中?或者它们只是供应商特定的专有代码,内核使用它们来访问设备?
一个具体例子的回答,比如iwl3160-firmware,将不胜感激。
答案 0 :(得分:1)
"固件"已经变得更加广泛,并从编写到芯片的NVM的代码发展到更多涉及编程中间件的术语。
我自己没有检查过这些文件,但我无法想象它们实际上已经被烧毁了。我想它们只是驱动程序,它将从应用程序级别获取高级别输入并将其转换为操作对于低级硬件。那就是现在的固件。
答案 1 :(得分:0)
与此处发布的the other answer相反,this article指出设备的驱动程序确实可以将固件加载到设备上。
该文章解释了在使用Ubuntu时以这种方式使用固件文件:
- 驱动程序请求固件文件“ ar9170.fw”
- 内核将事件发送到udev询问固件
- udev程序运行一个脚本,该脚本将固件文件中的数据推入由内核创建的特殊文件中
- 内核从其创建的特殊文件中读取固件数据,并将数据交给驱动程序
- 然后,驱动程序执行将固件加载到设备中所需的操作
此外,对于this answer,现代设备还旨在从将对其进行控制的主操作系统中获取固件。这就是Linux在/lib/firmware
中提供大量固件文件的原因。