You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

ARM处理器启动是否进入16位实模式?嵌入式设备启动机制问询

ARM嵌入式设备(如智能手机)的启动模式:和x86完全不同!

嘿,刚接触OS开发就跨架构对比,这个思路挺棒的!先给你一个明确的结论:ARM处理器完全没有16位实模式这种东西,它的启动流程和x86是两套完全独立的设计逻辑,根源在于两者的历史定位和架构设计差异。

下面具体拆解关键点:

1. ARM启动的初始特权模式

ARM架构从诞生起就没有x86那种为兼容老硬件遗留的16位模式,启动时直接进入最高特权级的异常模式

  • 对于32位ARMv7-A(比如早期智能手机用的架构),启动默认进入Supervisor(SVC)模式,这是特权级最高的非安全模式,拥有访问所有系统寄存器、配置硬件的权限。
  • 对于64位ARMv8-A(现在主流手机、服务器用的架构),启动时会先进入EL3(Exception Level 3)——这是ARMv8架构里最高的异常级别,负责安全相关的初始化(比如TrustZone),此时会运行芯片厂商提供的低级启动固件(比如BL1),模式可能是AArch64(64位)或AArch32(32位),但绝对不会是16位。

2. 为什么没有16位实模式?

x86的16位实模式是为了兼容1978年的8086处理器而保留的历史包袱,而ARM从设计之初就是面向嵌入式、高性能场景,没有这种兼容旧硬件的需求,所以从启动开始就用32位/64位的特权模式,直接可以访问全地址空间(当然初期可能会有硬件限制,比如部分内存区域未初始化),不需要像x86那样从16位逐步切换到保护模式。

3. 智能手机的实际启动流程举例

以现在主流的ARMv8-A架构智能手机为例,启动流程大概是这样的:

  • 第一步:运行BL1(芯片厂商固化在ROM里的低级初始化程序,比如高通的QSBL),负责初始化核心硬件(比如CPU、内存控制器),然后加载BL2。
  • 第二步:BL2加载并执行BL31(安全监控固件,实现TrustZone安全机制)。
  • 第三步:BL31加载并启动BL32(安全OS,比如用于指纹、支付的可信执行环境)和BL33(主系统的bootloader,比如U-Boot或者高通的ABL)。
  • 最后:bootloader加载并引导安卓/iOS等主操作系统。
    整个过程全程都是在32位或64位的特权模式下运行,完全没有16位模式的参与。

4. 有没有类似x86实模式的ARM模式?

其实ARM没有对应x86实模式的概念。x86实模式的核心特点是分段寻址、只能访问1MB内存、没有内存保护,而ARM的初始特权模式下,内存寻址是直接的物理寻址(或早期的平坦寻址),并且拥有完整的硬件配置权限,和x86实模式的受限状态完全不同。

内容的提问来源于stack exchange,提问作者vigilante_stark

火山引擎 最新活动