例如,我有一台打印机,它有一个嵌入式Web服务器,可以让我远程管理打印机。当我打开制造商的网站时,我发现该操作系统是:OS 9.86。这是什么类型的操作系统?请参见:Phaser 8560 Support & Drivers。
简单来说:
操作系统(OS)
包含内核,图形用户界面(GUI)或至少一个使用硬件进行文件管理的命令行界面(CLI)。
内核
是操作系统软件的一部分,是操作系统与硬件之间的门卫和翻译器。
换句话说(来自维基百科),内核的主要功能是调解对计算机资源的访问:
固件
当您开启计算机时:
固件→内核→完整的操作系统
基本上
固件是指存储在非易失性内存中的一小段代码。在如今常见的硬件外设中(例如打印机、VoIP电话等),固件通常负责加载(例如操作系统代码签名验证)和管理(例如在恢复模式下刷新操作系统)安装在设备上的操作系统。而实际的任务(例如打印)则由操作系统来执行。
硬件供应商通常使用Linux的派生版本(例如Cisco IOS)或实时操作系统(例如VxWorks)。
正如其他人所指出的那样,固件是存储在设备中的非易失性内存中的指令。它包含设备在断电或重置时启动执行的指令。这可能是设备上的全部软件,或者它可能包含跳转到某个其他组件上的指令,例如PC的BIOS会导致处理器读取硬盘驱动器(或软盘或CD-ROM)上的第一个扇区,以发现下一步要运行的代码。
操作系统是在设备上运行的代码,为应用程序提供访问设备功能的服务。例如,它可以提供时间片分配处理器、文件系统进行访问、输入和输出等。
嵌入式设备不需要为应用程序提供操作系统,但对于制造商编写软件来说,这可能是一个合适的模型。一个打印机可能将所有固件放在一个正在运行的程序中,带有一些中断处理程序,而无需将Web服务器与操作系统分开。我不知道这个特定型号的情况。
关键是操作系统可以存在于固件中,固件也可以存在于没有操作系统的情况下。它们是独立的概念。
任何设备(计算机、打印机、扫描仪、数码相机等)启动时,都需要一个初始程序来运行。这个初始程序称为固件,也称为引导程序或BIOS,它被装在只读存储器(ROM)中(一种非易失性存储器,其内容是永久的)。
固件定位操作系统的内核(记住,内核是操作系统的一部分),并在启动时将其加载到主存储器(RAM)中。固件通常使用汇编语言或高级语言(如C / C ++)编写。
操作系统是完整的软件堆栈,管理计算机的硬件并设置应用程序运行的环境。换句话说,操作系统执行设备的指定任务。软件堆栈的底部是内核,它会持续运行,只要你的设备开机并运行。当我说操作系统管理硬件时,实际上是内核管理对硬件资源(CPU、内存、输入和输出)的任何请求。
为了延续其他人的发帖内容:
固件不仅仅是引导程序或BIOS,尽管这是大多数消费设备中该术语的常见用法。
在更复杂的应用中,现场可编程门阵列(FPGA)、复杂可编程逻辑器件(CPLD)和其他类似技术提供了一种创建可配置逻辑电路的机制,可以远远超出微控制器或更大处理器运行的线性可执行代码。这通常是应用特定集成电路(ASIC)的替代方案,因为在芯片布局完成后无法更改。
在这种应用中,固件所做的远不止加载代码以启动事物。应用程序可以被设计来处理多个并行操作,包括但不限于地址路由、信号处理、数学协处理、计时器、电源和复位序列,甚至LED和继电器控制。
创建自定义设备的可能性是无限的,并且在FPGA和CPLD的情况下,可以重新编程。
上述类型的固件通常是用VHDL编程,它描述同步或异步并行逻辑以表示所需功能。设计通常布局为通过内存映射地址范围或通过某些其他协议(例如PCI / PCI-X / PCIe)可由软件访问。固件设计创建的寄存器表示所需功能的一组控制和状态。