1. 固件运行环境的基本概念
当第一次接触NPU固件开发时,最令人困惑的问题之一就是"这个固件到底运行在什么地方"。就像鱼离开水就无法生存一样,固件也必须找到合适的运行环境才能发挥作用。在嵌入式系统和NPU开发中,固件的运行位置直接影响着它的功能实现、性能表现以及与其他系统组件的交互方式。
1.1 什么是固件的"运行位置"
固件的运行位置指的是固件代码在计算机系统中的执行环境和所处层级。不同于普通应用程序,固件作为硬件与软件之间的桥梁,其运行位置的选择需要考虑以下关键因素:
- 硬件直接访问需求:某些固件需要直接操作硬件寄存器,这就要求它必须运行在能够直接访问硬件的层级
- 性能要求:对延迟敏感的操作需要尽可能靠近硬件运行
- 安全性考虑:不同运行位置提供的隔离性和保护机制不同
- 开发复杂度:越底层的开发对开发者要求越高
在NPU开发中,我们通常会遇到三种主要的运行环境:裸机环境、Linux用户态和Linux内核态。每种环境都有其独特的特性和适用场景。
1.2 从裸机到操作系统的演进
早期的嵌入式系统大多采用裸机(Bare Metal)方式运行,即没有操作系统的环境下直接操作硬件。随着系统复杂度的提升,现代NPU开发越来越多地转向基于Linux的环境,这带来了用户态和内核态的区分:
- 裸机环境:直接运行在硬件上,没有中间层,完全掌控系统资源
- Linux用户态:受操作系统保护,通过系统调用与硬件交互
- Linux内核态:作为内核模块运行,拥有更高权限但风险也更大
这种演进反映了嵌入式系统从简单到复杂、从专用到通用、从封闭到开放的发展趋势。理解这些运行环境的差异,是NPU固件开发者必须掌握的基础知识。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 裸机环境下的固件运行
裸机环境是最接近硬件的运行方式,也是理解固件运行原理的最佳起点。在这种模式下,固件直接掌控整个硬件平台,没有任何中间层或抽象。
2.1 裸机环境的特点
裸机环境下的固件运行具有以下典型特征:
- 直接硬件访问:固件代码可以直接读写硬件寄存器,无需通过驱动程序
- 单任务运行:通常一次只执行一个主要任务,没有多任务调度
- 完全控制权:对内存、外设等系统资源有绝对控制
- 启动速度快:没
