操作系统(os)、驱动和固件的关系
操作系统属于软件而不属于固件!
很多人会搞混是因为操作系统、固件和驱动挨得很近,我们将其拆开:
层级关系
应用软件(微信、抖音、相机APP) ← 上层软件
↓
操作系统内核 + 设备驱动(Driver) ←【操作系统,软件层】
↓
命令通过总线下发(I2C/AXI/SPI)
↓
固件(Firmware) ← 芯片内部小程序
↓
硬件(CPU、ISP、传感器、SSD芯片) ← 物理硬件
操作系统是什么
OS是跑在主控CPU上的一大套软件,如Windows、Linux、Android、鸿蒙、iOS、FreeRTOS、LiteOS等。而固件绝大多数跑在外设独立的子处理器上,只管这一块硬件
特点:
运行载体 主CPU
管辖范围 全局。管理内存、任务调度、中断、所有外设和上层app
存储位置 板载Flash,不是cpu芯片内部
目标受众 给上层应用、驱动提供运行环境。【驱动属于OS的一部分,也是软件,相当于OS和固件间的翻译官】
可替换性 可以重装、刷别的系统
注意:
RTOS(实施操作系统)如FreeRTOS和LiteOS,当把实时操作系统直接烧进单片机MCU片内Flash的时候它既是操作系统,又是固件。原因:具备OS能力,如任务调度、信号量和队列维护,又固化在芯片内部掌管单片机全部硬件,没有另外一颗主CPU(因此无主机-外设两颗cpu划分,边界消失)
对比表格
| 对比项 | 操作系统 | 固件 |
|---|---|---|
| 运行CPU | 主cpu(ap) | 外设芯片独立子内核 |
| 管辖范围 | 全局资源 | 只管理自身这一块 |
| 存储位置 | 主板Flash,独立于CPU | 外设芯片内部Flash |
| 上层接口 | 给APP和驱动提供API | 给主CPU的驱动提供接口 |
| 能不能卸载重装 | 可以换系统、重装Linux/Android | 不能卸载,只能单独升级 |
| 例子 | Android、linux、鸿蒙、windows | ISP固件、蓝牙固件 |
| 通信对象 | 上层应用程序(驱动软件为OS内核组件) | 主机的驱动软件 |
通信对象补齐
| 模块 | 向上和谁通信 | 向下和谁通信 | 接口类型 |
|---|---|---|---|
| 上层APP | 无 | OS | 用户态API |
| OS | 上层APP | 设备驱动 | 向上:API;向下:内核API/框架接口 |
| 驱动 | OS | 固件 | 向上:调用内核API;向下:跨核通信接口 |
| 固件 | 驱动 | 硬件寄存器 | 向上:固件通信接口 |
总结
OS往上给APP提供API,往下和驱动通信,使用内核的API/框架接口。驱动在跨国处理器边界通过通信接口和ISP固件说话
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)